我和小伙伴们一起学Unity3D(六)碰撞与触发器

 在上一节我们介绍了刚体,但刚体只能使物体可以在力的作用下运动,小球之所以能撞到地面而不是穿过地面,是因为在创建物体时,U3D自动为每个物体附加了碰撞器,有了碰撞器,才会使物体正常的碰撞,而不是穿过。

        接着上节的项目,选中Shere,点掉物体的材质渲染Mesh Renderer选项,在Scene视图里的绿线就是碰撞器

       

       在碰撞器的属性中我们可以看到,U3D允许我们手动调节碰撞器的位置和大小(这里告诉大家一个小技巧,鼠标放在X,Y,Z,Radius,当鼠标变成两个左右对立的小箭头时,上下移动鼠标可以调节编辑框里的数值)

       对于简单的几何物体,碰撞器相对简单,而当物体的模型是一个个鲜活的人物,球形碰撞器或者方盒碰撞器显然无法正常模拟物体的碰撞范围,这时就需要用到网状碰撞器。选中小球,在菜单栏选择Component——>Physics——>Mesh Collider在弹出是否替换碰撞器的对话框中选择替换,这样我们就为物体添加了网格碰撞器,在Scene视图,我们可以看到,网格碰撞器是按照物体的形状精密的排布,这样,不论物体是什么形状,我们都可以为它添加碰撞器了,但值得注意的是:两个网格碰撞器是不发生碰撞的

      触发器:

      在游戏中我们常常遇到这样的场景,走近一片特定区域,人物就会被传送或者遇到怪物,这就是我接下来要介绍的触发器(概念太过学术,不喜欢,就不说了),在上图中选中Is Trigger,碰撞器便成了触发器,需要注意的是,触发器是可以被穿越的,不然我们怎么进入这边区域呢,对吧

     和碰撞器一样,触发器也有相应的行为函数:

     OnTriggerEnter:当物体进入触发器的一瞬间触发

     OnTriggerStay:当物体进入触发器后离开触发器前触发

     OnTriggerExit:当物体离开触发器的一瞬间触发

为了让大家理解触发器,我们接着上节的项目,做一个小测试

      选中Cube,将它作为触发器,将下面的脚本拖到Cube上

  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class TriggerTest : MonoBehaviour {  
  5.   
  6.     // Use this for initialization   
  7.     void Start () {  
  8.       
  9.     }  
  10.       
  11.     // Update is called once per frame   
  12.     void Update () {  
  13.       
  14.     }  
  15.   
  16.     void OnTriggerEnter(Collider other)  
  17.     {  
  18.         print(other.gameObject.name + "Enter");  
  19.     }  
  20.   
  21.     void OnTriggerStay(Collider other)  
  22.     {  
  23.         print(other.gameObject.name + "Stay");  
  24.     }  
  25.   
  26.     void OnTriggerExit(Collider other)  
  27.     {  
  28.         print(other.gameObject.name + "Exit");  
  29.     }  
  30. }  
using UnityEngine;
using System.Collections;

public class TriggerTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    void OnTriggerEnter(Collider other)
    {
        print(other.gameObject.name + "Enter");
    }

    void OnTriggerStay(Collider other)
    {
        print(other.gameObject.name + "Stay");
    }

    void OnTriggerExit(Collider other)
    {
        print(other.gameObject.name + "Exit");
    }
}


 

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值