控制组件
角色控制组件和刚体组件一样都具有物理引擎的功能,他们在同一个游戏对象中只能存在一个。。刚体组件能够非常精准的模拟现实世界当中的模型的物理效果,而角色控制组件则没有刚体这么准确,他可以限制我们所控制的角色的一些物理引擎的效果。
1、添加组件
添加角色控制组件需要先添加Unity标准资源包。添加完包后创建模型,选择add Component->Physics->Character Controller。
组件属性
属性名称 | 介绍 |
---|---|
Slope Limit | 坡度限制,坡度大于该值的上不去 |
Step Offset | 台阶偏移量,步高,高度大于该值的跨不上去 |
Skin Width | 皮肤厚度,碰撞后渗入的深度 |
Min Move Distance | 最小移动距离,如果移动距离小于该值,则角色不会移动 |
Center | 碰撞胶囊体的中心坐标 |
Radius | 碰撞胶囊体的半径 |
Height |
2、控制移动
可以使用Move函数来控制模型移动。使用TransformDirection()来获得角色移动的方向
private CharacterController character;
private float moveSpeed = 3.0f;
// Use this for initialization
void Start () {
character = GetComponent<CharacterController> ();
}
void OnGUI(){
if (GUILayout.RepeatButton ("向前移动")) {
Vector3 forward = transform.TransformDirection (Vector3.forward);
character.Move (forward*moveSpeed);
} else if (GUILayout.RepeatButton ("向后移动")) {
Vector3 forward = transform.TransformDirection (Vector3.forward);
character.Move(-forward*moveSpeed);
}
}
3、碰撞检测
角色控制器可以感受到游戏对象之间的碰撞,检测他们碰撞时需要调用OnControllerColliderHit()方法。
private CharacterController character;
private float moveSpeed = 3.0f;
private GameObject colliderObj = null;
// Use this for initialization
void Start () {
character = GetComponent<CharacterController> ();
}
void OnGUI(){
if (GUILayout.RepeatButton ("向前移动")) {
Vector3 forward = transform.TransformDirection (Vector3.forward);
character.Move (forward*moveSpeed);
} else if (GUILayout.RepeatButton ("向后移动")) {
Vector3 forward = transform.TransformDirection (Vector3.forward);
character.Move(-forward*moveSpeed);
}
if (character.collisionFlags == CollisionFlags.Sides) {
if(colliderObj != null){
GUI.color = Color.black;
GUI.Label(new Rect(200,100,200,100), "碰撞的对象名称为:" + colliderObj.name);
}
}
}
void OnControllerColliderHit(ControllerColliderHit hit){
colliderObj = hit.gameObject;
}
来源:CSDN
作者:qq_39485740
链接:https://blog.csdn.net/qq_39485740/article/details/103743329