Unity物理引擎学习(四)

久未见 提交于 2019-12-28 17:15:01

控制组件

角色控制组件和刚体组件一样都具有物理引擎的功能,他们在同一个游戏对象中只能存在一个。。刚体组件能够非常精准的模拟现实世界当中的模型的物理效果,而角色控制组件则没有刚体这么准确,他可以限制我们所控制的角色的一些物理引擎的效果。

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!