现在的位置: 首页 > 综合 > 正文

Unity 如何实现控制主角以及碰撞检测

2013年09月29日 ⁄ 综合 ⁄ 共 1561字 ⁄ 字号 评论关闭

触发信息检测:
1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器
2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器

碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay( Collision collisionInfo )  当逗留碰撞器

transform.TransformDirection();方法能够得到主角移动时面朝的方向。

要注意的是一定要将脚本与主角相关联

public class Script_06_06 : MonoBehaviour 
{
	
	//角色控制器对象
	private CharacterController controller = null;
	//角色的移动的速度
	private float moveSpeed = 3.0f;
	//角色的旋转速度
	private float rotateSpeed = 3.0f;
	
	void Start()
	{
		//获取角色控制器对象
		controller = GetComponent<CharacterController>();
	}
	
	void OnGUI()
	{
		
		//控制角色旋转
		if(GUILayout.RepeatButton("向左旋转"))
		{
			transform.Rotate(0,-rotateSpeed, 0);
		}
		if(GUILayout.RepeatButton("向右旋转"))
		{
			transform.Rotate(0,rotateSpeed, 0);
		}
		
		//控制角色移动
		if(GUILayout.RepeatButton("向前移动"))
		{
			Vector3 forward = transform.TransformDirection(Vector3.forward);
			controller.Move(forward*moveSpeed);
		}
		if(GUILayout.RepeatButton("向后移动"))
		{
			Vector3 forward = transform.TransformDirection(Vector3.forward);
			controller.Move( forward*-moveSpeed);
		}
		
		//控制角色飞行与降落
		if(GUILayout.RepeatButton("起飞"))
		{
			transform.Translate(0, 1, 0);   
		}
		if(GUILayout.RepeatButton("降落"))
		{
			transform.Translate(0, -1, 0);   
	
		}
	}
}

碰撞检测回调的方法。

void OnControllerColliderHit(ControllerColliderHit hit)
	{
		colliderobj = hit.gameObject;
		Debug.Log("zzzz"+colliderobj.name);
	}

下面碰撞后作出的反应。写在OnGUI()函数中

if(controller.collisionFlags == CollisionFlags.Sides)
		{
			Debug.Log("ccccc");
			if(colliderobj != null){
			GUI.Label(new Rect(200,100,200,100),"CollisionObject:"+ colliderobj.name);
			}
		Debug.Log("4444ccccc");
		}

抱歉!评论已关闭.