Unity3D 之 OnTriggerEnter和OnCollisionEnter同比和环比的区别别

unity3d(109)
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
物体发生碰撞的必要条件
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。
碰撞器:&一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
触发器&,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
触发信息检测:
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#脚本文件,把它拖给小汽车对象,双击该脚本文件进入脚本编辑器,在该脚本中加入如下两个方法,并分别设置一个断点:
void OnTriggerEnter(Collider collider)
void OnCollisionEnter(Collision collision)
当未勾选碰撞器的Is Trigger选项时汽车与球体发生碰撞,进入方法OnCollisionEnter,碰撞之后汽车产生被球体撞飞的效果:
如果将碰撞器的Is Trigger属性选中,再次启动游戏让球体与汽车产生接触,这时进入方法OnTriggerEnter。之后球体直接穿过汽车,但球体与汽车都没有产生碰撞效果:
unity3d中的碰撞器和触发器的区别?
碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性
当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器
碰撞器:汽车被撞飞、皮球掉在地上又弹起效果
触发器:人站在靠近门的位置门自动打开效果
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:205370次
积分:2762
积分:2762
排名:第13028名
原创:31篇
转载:268篇
(1)(8)(1)(14)(12)(9)(2)(13)(1)(3)(2)(6)(2)(12)(11)(14)(54)(20)(54)(60)Posts - 137,
Articles - 0,
Comments - 137
理论是实践的基础,实践又是检验真理的唯一标准!!
14:39 by 糯米粥, ... 阅读,
觉得这个讲的挺好的,就转过来了:)
太抽象的理论总是让人眼花缭乱,所以我这里以例证为主。
1,测试OnTriggerEnter和OnCollisionEnter的区别
测试:如果两个物体A,B&
两者都有碰撞体collider(Box Collider,Sphere Collider,Capsule Collider等)
A,B都有刚体(Rigidbody)
A或者B中有一个勾选isTrigger或者两者都勾选isTrigger A和B都可以进入OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。
A和B都不勾选isTrigger,A和B能进入OnCollisionEnter方法但是不能进入OnTriggerEnter方法。
OnCollisionEnter方法必须是在两个碰撞物体都不勾选isTrigger的前提下才能进入,反之只要勾选一个isTrigger那么就能进入OnTriggerEnter方法。
OnCollisionEnter和OnTriggerEnter是冲突的不能同时存在的。
2,OnTriggerEnter和OnCollisionEnter的选择。
如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。
如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。
3,一些技巧。
3.1:刚体(Rigidbody)的使用。
& & &两个碰撞的物体A 和 B
& & &现在我们就可以分两种模式来分析了,就是OnTrigger模式和OnCollision模式,因为上面已经详细介绍了两者是对立的模式,&
& & &在OnCollision模式下:
& & &测试1:如果只有A有刚体(Rigidbody),那么当A去碰撞B时,发现A弹开B没有动。A和B都进入OnCollisionEnter方法
& & &结论1:只有刚体能实现真实的物理碰撞。
& & &测试2:如果只有A有刚体(Rigidbody),那么当B去碰撞A时,发现没有碰撞效果,A和B都没有进入OnCollisionEnter方法。
& & &结论2:实现碰撞的条件是,发起碰撞方必须具有刚体。
& & &这里我猜测了刚体是用来实现物理真实碰撞的Component,但是这个想法是错误的,因为OnTriggerEnter也必须有一个物体具有刚体,所以猜测刚体应该是一个判断是否实现碰撞的是与否的标志。
& & &在OnTrigger模式下:
& & &A和B必须有一个有刚体(Rigidbody),A和B都可以进入OnTriggerEnter方法。
4,知识扩展。
上面的内容中有的实验是A,B有一个有刚体,有的实验是A,B都有刚体,那么为什么不干脆把两个物体都加刚体就没这么多麻烦了?
其实是这样的,真实游戏里面,有太多的物体,而这些物体如果都有刚体那么对系统的开销是很大的,如果可以减少一半的开销是很不错的选择。
比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。
来自地址:/dajiangfengdu2/item/8dec48c008ebf823e80f2e3812249人阅读
Unity3D(10)
&&&& 在游戏中我们需要用到很多的碰撞和触发器,大家都知道OnCollisionEnter是判断两个刚体之间的碰撞,但是有时候用碰撞不是很方便,比如说人物进入门附近的一定区域就把门打开,这里建议使用触发器,但是触发器怎么使用呢。
&& 1、先创建两个Cube,把它们之间的距离调整一下,给他们加上颜色,效果如下
&&&&&&&&&&&&&&&&&&&&&&&&&&&
& 2、选择红色的那个Cube,在它的Box Collider中的Size属性都调整为3,当然啦,你根据实际需要调整大小即可,这样才能在未碰到物体的时候,就触发事件;
&&&&&&&&&&&&&&&&&&&&&&&&&&
3、为两个物体添加刚体组件,
4、写一个触发器脚本
using UnityE
using System.C
public class TriggerTest : MonoBehaviour {
void OnTriggerEnter(Collider collider)
print(&Enter&);
void OnTriggerExit(Collider collider)
print(&out&);
5、把脚本拖到红色的Cube上,运行;你可以使用脚本控制Cube的移动,让他们之间的距离缩小,也可以使用强大的Unity啦,在Scene窗口中,改变两个Cube之间的距离,就可以看到输出&Enter&,&out&;好了,触发器的介绍基本完毕
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38489次
排名:千里之外
原创:25篇
本博客会定期更新一些文章,希望写出好的文章,分享给大家,也是自己的成长历程,保持空杯心态,每天都有新的收获,希望大家关注我。觉得这个讲的挺好的,就转过来了:)
太抽象的理论总是让人眼花缭乱,所以我这里以例证为主。
1,测试OnTriggerEnter和OnCollisionEnter的区别
测试:如果两个物体A,B&
两者都有碰撞体collider(Box Collider,Sphere Collider,Capsule Collider等)
A,B都有刚体(Rigidbody)
A或者B中有一个勾选isTrigger或者两者都勾选isTrigger A和B都可以进入OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。
A和B都不勾选isTrigger,A和B能进入OnCollisionEnter方法但是不能进入OnTriggerEnter方法。
OnCollisionEnter方法必须是在两个碰撞物体都不勾选isTrigger的前提下才能进入,反之只要勾选一个isTrigger那么就能进入OnTriggerEnter方法。
OnCollisionEnter和OnTriggerEnter是冲突的不能同时存在的。
2,OnTriggerEnter和OnCollisionEnter的选择。
如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。
如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。
3,一些技巧。
3.1:刚体(Rigidbody)的使用。
& & &两个碰撞的物体A 和 B
& & &现在我们就可以分两种模式来分析了,就是OnTrigger模式和OnCollision模式,因为上面已经详细介绍了两者是对立的模式,&
& & &在OnCollision模式下:
& & &测试1:如果只有A有刚体(Rigidbody),那么当A去碰撞B时,发现A弹开B没有动。A和B都进入OnCollisionEnter方法
& & &结论1:只有刚体能实现真实的物理碰撞。
& & &测试2:如果只有A有刚体(Rigidbody),那么当B去碰撞A时,发现没有碰撞效果,A和B都没有进入OnCollisionEnter方法。
& & &结论2:实现碰撞的条件是,发起碰撞方必须具有刚体。
& & &这里我猜测了刚体是用来实现物理真实碰撞的Component,但是这个想法是错误的,因为OnTriggerEnter也必须有一个物体具有刚体,所以猜测刚体应该是一个判断是否实现碰撞的是与否的标志。
& & &在OnTrigger模式下:
& & &A和B必须有一个有刚体(Rigidbody),A和B都可以进入OnTriggerEnter方法。
4,知识扩展。
上面的内容中有的实验是A,B有一个有刚体,有的实验是A,B都有刚体,那么为什么不干脆把两个物体都加刚体就没这么多麻烦了?
其实是这样的,真实游戏里面,有太多的物体,而这些物体如果都有刚体那么对系统的开销是很大的,如果可以减少一半的开销是很不错的选择。
比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。
来自地址:/dajiangfengdu2/item/8dec48c008ebf823e80f2e38
阅读(...) 评论()unity(8)
OnTriggerEnter和OnCollisionEnter的触发条件是不同的,需要在设计的过程中加以关注。
触发的共同要求
碰撞的两个物体A,B,都要有碰撞体(collider),Box Collider,Sphere Collider,Capsule Collider等的任意一种
当A,B都添加刚体(Rigidbody)时
OnCollisionEnter方法
A和Bx相互碰撞时,无论是谁碰撞的谁,两者都能触发OnCollisionEnter方法,前提是两者都没有勾选isTrigger。
OnTriggerEnter方法
A或者B中有一个勾选isTrigger或者两者都勾选isTrigger后,A和B都可以触发OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。
OnCollisionEnter方法必须是在两个碰撞物体都不勾选isTrigger的前提下才能进入,反之只要勾选一个isTrigger那么就能进入OnTriggerEnter方法。
OnCollisionEnter和OnTriggerEnter是冲突的不能同时存在的。
当A,B有一个添加了刚体(Rigidbody)时
OnCollisionEnter方法
若A添加了刚体,B没有添加刚体,A去碰撞B,则A会被弹开,B不会运动,此时A、B都会触发OnCollisionEnter方法。
若A添加了刚体,B没有添加刚体,B去碰撞A,不会发生碰撞效果,此时A和B都不会触发OnCollisionEnter方法。
OnTriggerEnter方法
只要A和B中有一个添加了刚体,无论谁碰撞谁,两者都会触发 OnTriggerEnter方法
OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要。OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发。即刚体是一个判断是否实现碰撞的是与否的标志。
刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。 比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。
需要让被碰撞者触发OnCollisionEnter的办法
我们可以用一些方法来规避OnCollisionEnter的要求,达到同样的效果。
A添加了刚体,B没有刚体,但是需要B碰撞A同时触发碰撞效果。此时碰撞发起者是B,而B没有刚体,是无法触发OnCollisionEnter方法的。
解决方法:
我们可以在B的下面创建一个子物体C(可以是空物体),并给C添加collider,勾选isTrigger。
将C的collider大小设置的和B的collider一样大,并且位置重叠。
使用OnTriggerEnter方法,达到同样的目的。A在和B碰撞的同时,也与C碰撞,会触发A与C之间的OnTriggerEnter方法。
本文参考学习了他人的研究成果,并在其基础上添加了自己的看法,在这里向原作者表示感谢。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24607次
排名:千里之外
原创:42篇
(4)(6)(1)(1)(1)(3)(5)(16)(9)(1)}

我要回帖

更多关于 车厘子和樱桃的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信