当前位置:   article > 正文

Unity:角色控制器(CharacterController)_unity character controller

unity character controller

角色控制器是unity中专门用来控制角色的组件(主要是运动相关),区别于直接用Transform或者RigidBody,CharacterController有着更好的效果,它拥有RigidBody的一些重要特性,但是又去掉了很多物理效果,这样可以避免诸如穿模,滑步,被撞飞或者将其他物体撞位移等情况。

其主要属性如下:

斜度限制代表的是角色可以走上的斜坡角度

每步偏移量其实就是能走上的台阶的高度,这其实是很有用的一个属性,走上一些高度不是很高的台阶或者石头之类的东西不再需要跳跃,这也更符合实际的移动情况。但是这个值有一个限制即该值必须小于等于(高度+半径*2)(上分图片中的最下方两个值),这个设定其实很好理解,毕竟你一个一米七的人不可能一步跨上一米多的台阶吧。

蒙皮宽度一般不用管,它就是在你的碰撞器外再加一层,用于适应衣服等,是一个很小的值。

最小移动距离顾名思义就是每一步移动的最小量,这个值不宜过大,否则可能会出现“罚站”的情况

中心即使碰撞器的中心,半径和高度也是指的碰撞器的参数。CharacterController是自带碰撞器的不需要再去添加,其默认的碰撞器是胶囊形。

CharacterController为我们提供了两种移动方法:Move 和 SimpleMove,两者都需要一个Vector3类型的参数

其中Move不会受到重力效果,需要重力可以把参数中的Y设为重力(比如-9.8),返回碰撞的信息

SimpleMove会受到重力效果,参数中的Y可以不写,会有默认值,返回一个Bool值,是否在地面上

下面做一个简单的演示:

 先简单创建一个场景,做一个斜面和一个台阶,创建一个胶囊作为角色,然后把主摄像机绑定到胶囊上模拟第一人称游戏的场景。

  1. CharacterController controller;
  2. void Start()
  3. {
  4. controller = GetComponent<CharacterController>();
  5. }
  6. void Update()
  7. {
  8. Move();
  9. }
  10. void Move()
  11. {
  12. float h = Input.GetAxis("Horizontal");
  13. float v = Input.GetAxis("Vertical");
  14. Vector3 dir = new Vector3(-h, 0, -v);
  15. controller.SimpleMove(dir);
  16. }

 Horizontal和Vertical代表横向和纵向输入即WASD或者上下左右键(这里的负号只是我的场景里面的方向的问题)

 

 

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号