赞
踩
角色控制器是unity中专门用来控制角色的组件(主要是运动相关),区别于直接用Transform或者RigidBody,CharacterController有着更好的效果,它拥有RigidBody的一些重要特性,但是又去掉了很多物理效果,这样可以避免诸如穿模,滑步,被撞飞或者将其他物体撞位移等情况。
其主要属性如下:
斜度限制代表的是角色可以走上的斜坡角度
每步偏移量其实就是能走上的台阶的高度,这其实是很有用的一个属性,走上一些高度不是很高的台阶或者石头之类的东西不再需要跳跃,这也更符合实际的移动情况。但是这个值有一个限制即该值必须小于等于(高度+半径*2)(上分图片中的最下方两个值),这个设定其实很好理解,毕竟你一个一米七的人不可能一步跨上一米多的台阶吧。
蒙皮宽度一般不用管,它就是在你的碰撞器外再加一层,用于适应衣服等,是一个很小的值。
最小移动距离顾名思义就是每一步移动的最小量,这个值不宜过大,否则可能会出现“罚站”的情况
中心即使碰撞器的中心,半径和高度也是指的碰撞器的参数。CharacterController是自带碰撞器的不需要再去添加,其默认的碰撞器是胶囊形。
CharacterController为我们提供了两种移动方法:Move 和 SimpleMove,两者都需要一个Vector3类型的参数
其中Move不会受到重力效果,需要重力可以把参数中的Y设为重力(比如-9.8),返回碰撞的信息
SimpleMove会受到重力效果,参数中的Y可以不写,会有默认值,返回一个Bool值,是否在地面上
下面做一个简单的演示:
先简单创建一个场景,做一个斜面和一个台阶,创建一个胶囊作为角色,然后把主摄像机绑定到胶囊上模拟第一人称游戏的场景。
- CharacterController controller;
-
- void Start()
- {
- controller = GetComponent<CharacterController>();
-
- }
-
- void Update()
- {
- Move();
- }
-
- void Move()
- {
- float h = Input.GetAxis("Horizontal");
- float v = Input.GetAxis("Vertical");
- Vector3 dir = new Vector3(-h, 0, -v);
- controller.SimpleMove(dir);
- }
Horizontal和Vertical代表横向和纵向输入即WASD或者上下左右键(这里的负号只是我的场景里面的方向的问题)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。