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

unity 物体间的碰撞检测

2016-09-03 11:24 435 查看
游戏中,当人物碰到金币的时候,可能会播放一个动画,并且金币消失,

那么,如何判断金币和人物发生了碰撞呢?

我们用一个例子来说明一下物体间的碰撞。



using UnityEngine;

using System.Collections;

public class collisionTest : MonoBehaviour {

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

if (Input.GetKey (KeyCode.A)) 

{

transform.Translate(Vector3.right * -1 * Time.deltaTime);

}

if (Input.GetKey(KeyCode.D)) 

{

transform.Translate(Vector3.right * 1 * Time.deltaTime);

}

}

void OnCollisionEnter(Collision collisionP)

{

Debug.Log ("开始进入碰撞:" + collisionP.gameObject.name);

}

void OnCollisionStay(Collision collisionP)

{

Debug.Log ("碰撞进行中:" + collisionP.gameObject.name);

}

void OnCollisionExit(Collision collisionP)

{

Debug.Log ("碰撞停止:" + collisionP.gameObject.name);

}

void OnTriggerEnter(Collider other)

{

Debug.Log ("Trigger 开始进入碰撞:" + other.gameObject.name);

}

void OnTriggerStay(Collider other)

{

Debug.Log ("Trigger 碰撞进行中:" + other.gameObject.name);

}

void OnTriggerExit(Collider other)

{

Debug.Log ("Trigger 碰撞停止:" + other.gameObject.name);

}

}

我们为人物添加一个简单的脚本,当我们点击键盘的 A和 D时,可以左右移动。

但是,在这种情况下,有可能碰撞检测根本没有响应,

原因是没有加 Rigidbody,



我们之前,发现有一个标记,

Is Trigger ,



这个很重要,

如果一个物体,打上了 Trigger的标记,

那么,当其有碰撞发生时,

响应的是

 OnTriggerEnter ,OnTriggerStay,OnTriggerExit ,

如果没有打上 Trigger标记,

那么,响应的是

OnCollisionEnter,OnCollisionStay,OnCollisionExit,

那么,同样都是碰撞,Trigger有什么区别吗?

用一个手电筒,发射出一道光,

这道光和某个物体发生碰撞时,

不会不小心把这个物品碰掉地上,

而如果是用晾衣杆,不小心碰到某个物品,

那么,就有可能会把这个物品给碰倒。

参数的意思是,

是谁“碰”了 “我”。

游戏中,人物奔跑时,碰到的金币,

用 Trigger 就相对合适一点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: