初学Unity开发,仅以此做一下学习笔记。。。。
首先,我们得明确一点:即产生碰撞信息所需要的条件。事实上,在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念:
- 碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
- 所谓触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
- 在Unity3d中,主要有以下接口函数来处理这两种碰撞检测:
- 触发信息检测:
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 ) 当逗留碰撞器
以上这六个接口都是MonoBehaviour的函数,由于我们新建的脚本都继承这个MonoBehaviour这个类。所以我们的脚本里面可以覆写这六个函数。新建C#脚本
using UnityEngine;
using System.Collections;
public class TestCollider : MonoBehaviour {
public Transform cube;//将要碰撞到的GameObject的transform
public float speed = 1.0f;
public Vector3 dir = Vector3.zero;
void Start() {
if(cube){
dir = cube.position - transform.position;
dir = dir.normalized;
}
}
void Update() {
transform.Translate(dir * Time.deltaTime * speed);
}
//碰撞
void OnCollisionEnter(Collision collisionInfo)
{
Debug.Log("碰撞_Enter_碰撞到的物体的名字是:" + collisionInfo.gameObject.name);
}
void OnCollisionExit(Collision collisionInfo)
{
Debug.Log ("碰撞_Exit_碰撞到的物体的名字是:" + collisionInfo.gameObject.name);
}
void OnCollisionStay(Collision collisionInfo)
{
Debug.Log ("碰撞_Stay_碰撞到的物体的名字是:" + collisionInfo.gameObject.name);
}
//触发信息检测
void OnTriggerEnter(Collider other)
{
Debug.Log("触发信息检测_Enter_碰撞到的物体的名字是:" + other.gameObject.name);
}
void OnTriggerExit(Collider other)
{
Debug.Log("触发信息检测_EXit_碰撞到的物体的名字是:" + other.gameObject.name);
}
void OnTriggerStay(Collider other)
{
Debug.Log("触发信息检测_Stay_碰撞到的物体的名字是:" + other.gameObject.name);
}
}
碰撞测试步骤:
-
在场景新建地面和两个Cube用以测试
-
给物体附加刚体
- 控制物体移动形成碰撞
说明:这里我偷懒使用重力,勾选了Use Gravity
补充说明两个都是刚体不会穿透,也就没有Exit的打印,因此还是不要使用重力,自己随时改数据测试吧 - -
END