色控制器
定义:第三人称或第一人称游戏主角控制使用角色控制器,而不用刚体物理效果。使用角色控制器可以实现非常好的控制效果。
手动添加角色控制器:给游戏对象添加角色控制器,在选中对象后使用菜单Component→Physics→Character Controller
第一人称:
第一人称好比整个游戏中主角的眼睛,游戏中的画面一切好像自己眼睛中看到的一样。第一人称视角的控制原理是控制Scene视图中摄像机对象的移动,所以显示的永远都是主角的正前方,比如CS就是第一人称视角的游戏
第二人称:
在游戏中包括主角对象和摄像机对象,主角移动后,摄像机永远在跟着主角在运动,所以在Game视图中可以看到主角的运动,第三人称可以更为清晰的显示玩家在控制人物角色的效果
角色控制器属性:
属 性 | 说 明 |
Slope Limit | 坡度限制,角色控制器只能爬小于等于该值的斜坡 |
Step Offset | 台阶高度,角色可以迈上的最大台阶高度 |
Skin width | 皮肤厚度,皮肤厚度决定了两个碰撞器可以互 相渗入的深度。较大的皮肤厚值度会导致颤抖, 小的皮肤厚度值会导致角色被卡住。一个合理的 设定是使该值等于半径(Radius)的10% |
Min Move Distance | 最小移动距离,如果角色移动的距离小于该值, 那角色就不会移动。这可以避免颤抖现象。 大部分情况下该值被设为0 |
Center | 中心,该值决定角色控制器在世界空间中的 位置,并不影响角色的行动 |
Radius | 半径,角色控制器胶囊半径 |
Height | 高度,角色控制器胶囊高度 |
脚本添加角色控制器:
代码:
//角色控制器对象
private CharacterController controller=null;
private float moveSpeed=30.0f;//角色移动的速度
void Start () {
//获取角色控制器对象
controller = GetComponent<CharacterController>();
}
void Update{
if (Input.GetKeyDown(KeyCode.W)) {
controller.SimpleMove(Vector3.forward*moveSpeed);
}
if (Input.GetKeyDown(KeyCode.S)) {
controller.SimpleMove(Vector3.forward*-moveSpeed);
}
if (Input.GetKeyDown(KeyCode.A)) {
controller.SimpleMove(Vector3.right*-moveSpeed);
}
if (Input.GetKeyDown(KeyCode.D)) {
controller.SimpleMove(Vector3.right*moveSpeed);
}
移动与飞行效果:
原理:
角色控制器组件可以实现飞行与降落的功能,这可以通过Move()方法来实现,其中该方法的参数为飞行的角度。与SimpleMove()方法只适合用于平面中的移动(也就是x轴与z轴的移动)不同,Move()方法使用于所有方向的移动,所以它可以实现游戏对象任意角度的飞行与移动效果。
代码:
if (Input.GetKeyDown(KeyCode.W)) {
Vector3 forward=transform.TransformDirection(Vector3.forward);
controller.Move(forward*moveSpeed);
}
if (Input.GetKeyDown(KeyCode.S)) {
Vector3 back=transform.TransformDirection(Vector3.forward);
controller.Move(back*-moveSpeed);
}
更多精彩内容请到:http://www.gopedu.com/