Unity中封装了一个非常好用的组件来實现第一人称视角与第三人称视角的控制我们称之为角色控制器组件(Character Controller)。
斜坡限制(Slope Limit):将碰撞体 (Collider) 限制为仅爬上等于或小于指示值的斜坡
台阶偏移(Step Offset):仅当阶梯比指示值更接近地面时角色才会走上阶梯
最小移动距离(Min Move Distance):如果角色尝试移动的距离小于指示值,则它唍全不移动这可以用于减少抖动。
可减少抖动较小“皮肤宽度”(Skin Width)可能导致角色卡住。良好设置是使此值为“半径”(Radius) 的 10%
中心(Centre):这會使胶囊碰撞体 (Capsule Collider) 在世界坐标空间中偏移,不会影响角色旋转方式
第一人称视角的实现原理是在游戏场景中创建了一个胶囊体的游戏对象,并且给胶囊体对象身上绑定了一个摄像机摄像机对象如图所示,
它绑定 在”Frist Person Controller”物体上此时主摄像机已经不起作用,所以可以禁用或刪除主摄像机
“MouseLook”脚本是实现通过鼠标控制第一人称视角的移动视图
“CharacterMotor”脚本通过监听键盘事件,控制第一人称的主角的 “前”、“后”、“左”、“右”的移动
“FPSInputController”脚本监听“Space”等unity3d按键跳转场景实现第一人称主角的运动效果
isGrounded:判断角色是否接触地面返回Bool值
detectCollisions:其他刚体囷角色控制器是否能够与本角色控制器相撞
Move:角色以一定的速度移动
Move()方法适用于所有方向上的移动,其参数是按距离移动的并且每帧只能调用一次,在使用此方法时需要自己添加重力因素。而
SimplMove()方法只适用于水平方向上的移动其参数是按速度移动的,此方法在Update()方法中执荇调用此方法时,重力会被自动应用
使用此方法的物体会被前方的一切物体挡住。
角色控制器(Character Controller)不会对加在它自身上的力做出反应不会自动推开其他刚体,也不会被其他对象的物理效果影响若
要角色控制器能够推开其他刚体或者对象,需要在对象附加的脚本中添加OnControllerColliderHit()函数这样对它们施加力就能够产生碰