自己刚刚接触Unity,觉得很有意思,了解了几种触发方式,记录一下方便以后查阅
1.光线投射
简单来说就是用眼神杀死你
public static bool Raycast(Vector3 origin, Vector3 direction,out RaycastHit hitInfo, float maxDistance, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
origin 是光源点
direction 是发出的方向
maxDistance 是光线的距离
hitInfo 如果返回值是true,它会回调出被碰撞物体的信息
layerMask 是选定当前层内碰撞器,忽略其他层
queryTriggerInteraction 指定查询指令是否撞击触发器
返回值判断光线是否与其他物体交互
void Update () {
RaycastHit hit;
if(Physics.Raycast(transform.position,transform.forward,out hit,3.0f)){
// hit.collider.gameObject 获取到碰撞的物体进行操作
}
}
2.角色控制器
void OnControllerColliderHit(ControllerColliderHit hit){}
只有添加角色控制器组件才会触发这个方法, hit为碰撞的对象,例子如下
void OnControllerColliderHit(ControllerColliderHit hit){
if (hit.gameObject.tag == "playerDoor" ) { //碰撞物体的标签
AudioSource source = hit.gameObject.GetComponent<AudioSource> ();
if(!source.isPlaying){
source.PlayOneShot (door_open_sound); //只执行一次的音频
}
hit.gameObject.transform.parent.GetComponent<Animator> ().Play ("dooropen");
hit.gameObject.transform.Rotate(0,90,0);
InvokeRepeating ("close", 3.0f, 3.0f); //计时器
}
}
3.OnTriggerEnter
只要两者有一个勾选Is Trigger 选项, 在碰撞范围内并且有一个有刚体组件就会触发 OnTriggerEnter方法,
可以调节触发范围的大小,来达到你想要的碰撞范围
void OnTriggerEnter(Collider col){
if (col.gameObject.tag == "Player") {
col.gameObject.SendMessage ("cellPickup");//触发col.gameObject的方法
Destroy (gameObject);//销毁
}
}
4.OnCollisionEnter
只有都没有勾选Is Trigger 选项,并且发起的碰撞的一方要有刚体,就会触发此方法
void OnCollisionEnter(Collision collision){
// print (GetComponent<wupin>().count);
print ("刚体碰撞");
}
如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。
如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。
以上是自己学习了解到的 ,如有不对请大神们指出来