unity 物体间的碰撞检测
2016-09-03 11:24
435 查看
游戏中,当人物碰到金币的时候,可能会播放一个动画,并且金币消失,
那么,如何判断金币和人物发生了碰撞呢?
我们用一个例子来说明一下物体间的碰撞。
![](https://img-blog.csdn.net/20160903112436402?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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,
![](https://img-blog.csdn.net/20160903112544480?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们之前,发现有一个标记,
Is Trigger ,
![](https://img-blog.csdn.net/20160903112511488?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这个很重要,
如果一个物体,打上了 Trigger的标记,
那么,当其有碰撞发生时,
响应的是
OnTriggerEnter ,OnTriggerStay,OnTriggerExit ,
如果没有打上 Trigger标记,
那么,响应的是
OnCollisionEnter,OnCollisionStay,OnCollisionExit,
那么,同样都是碰撞,Trigger有什么区别吗?
用一个手电筒,发射出一道光,
这道光和某个物体发生碰撞时,
不会不小心把这个物品碰掉地上,
而如果是用晾衣杆,不小心碰到某个物品,
那么,就有可能会把这个物品给碰倒。
参数的意思是,
是谁“碰”了 “我”。
游戏中,人物奔跑时,碰到的金币,
用 Trigger 就相对合适一点。
那么,如何判断金币和人物发生了碰撞呢?
我们用一个例子来说明一下物体间的碰撞。
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 就相对合适一点。
相关文章推荐
- unity解决快速运动物体碰撞检测穿透问题
- Unity 碰撞检测,触发检测,方向键控制物体移动
- Unity两个物体发生碰撞的条件(即调用碰撞函数的条件)
- unity 用Box Collider为物体添加碰撞范围
- [Unity-4] 碰撞检测
- 【canvas】基于坐标的碰撞检测 / 基本的动画 / 多物体动画
- unity中htc vive射线与UI碰撞检测-graphcs.Raycast()
- 关于unity3的中的碰撞检测
- Unity实现简单的碰撞检测
- Unity3d中物体的的碰撞检测
- Unity 3D 里的碰撞检测
- Unity为物体添加物理碰撞效果
- 分享一个超高效的不规则物体碰撞检测的类~~
- unity体感游戏--接钻石游戏(三)游戏物体碰撞得分
- 【Unity入门】碰撞检测与触发检测
- Unity鼠标抓取gameobject(类似碰撞检测)
- Collider2D碰撞检测异常-Rotating sprite does not rotate collider[Unity]
- unity中碰撞检测相关问题
- unity代码示例和碰撞检测
- 粗略的物体碰撞预测及检测