unity 物体间的碰撞检测

来源:互联网 发布:万国数据科技公司怎样 编辑:程序博客网 时间:2024/04/29 01:50


游戏中,当人物碰到金币的时候,可能会播放一个动画,并且金币消失,


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


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



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 就相对合适一点。


0 0
原创粉丝点击