您的位置:首页 > 移动开发 > Unity3D

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

2013-07-11 14:27 806 查看
触发信息检测:

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");
		}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: