老公原谅我在老公面前,小情侣在废弃楼房里约会电视剧,大赛每日一赛吃瓜爆料

  • 您的位置:首页 > 新闻动态 > 技术文章

    Unity3d碰撞器与触发器的区别

    2017/6/26??????点击:
    要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
    物体发生碰撞的必要条件
    两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
    在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。
     
    碰撞器:一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
    触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
    unity3d box collider
     
    触发信息检测:
    1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器
    2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器
    3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
     
    碰撞信息检测:
    1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器
    2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
    3.MonoBehaviour.OnCollisionStay(Collision collision)  当逗留碰撞器
     
    两个物体相接触时到底执行OnTriggerEnter还是执行OnCollisionEnter方法,这两个又有什么区别呢?
    为了验证碰撞器与触发器的区别,现设计一个简单的游戏,让小汽车与小球发生碰撞。新建一个C#脚本文件,把它拖给小汽车对象,双击该脚本文件进入脚本编辑器,在该脚本中加入如下两个方法,并分别设置一个断点:
    复制代码
    voidOnTriggerEnter(Collider collider) {//进入触发器执行的代码}voidOnCollisionEnter(Collision collision) {//进入碰撞器执行的代码}
    复制代码
    当未勾选碰撞器的Is Trigger选项时汽车与球体发生碰撞,进入方法OnCollisionEnter,碰撞之后汽车产生被球体撞飞的效果:


    如果将碰撞器的Is Trigger属性选中,再次启动游戏让球体与汽车产生接触,这时进入方法OnTriggerEnter。之后球体直接穿过汽车,但球体与汽车都没有产生碰撞效果:


    unity3d中的碰撞器和触发器的区别?
    碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性
    当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
    当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。



    主站蜘蛛池模板: 沧源| 丽江市| 应城市| 城口县| 鄂尔多斯市| 巴东县| 塔城市| 昭苏县| 昌平区| 张北县| 尤溪县| 民丰县| 仙游县| 古蔺县| 柘城县| 大邑县| 梁河县| 武功县| 颍上县| 都兰县| 阜康市| 香港 | 固始县| 威宁| 吴江市| 册亨县| 股票| 中牟县| 云梦县| 太仆寺旗| 浑源县| 红原县| 土默特左旗| 周口市| 巴彦淖尔市| 阿巴嘎旗| 奉新县| 陇川县| 广安市| 唐海县| 抚顺市|