关于OnCollisionEnter2D和OnTriggerEnter2D两种碰撞触发

转自:https://blog.csdn.net/renatqiang/article/details/47682449 做下笔记。

一:产生碰撞的条件

1:若要产生碰撞,必须双方都要有碰撞器。

2:运动的一方一定要有刚体,另一方有无刚体无所谓,但需要注意的是如果是静止的物体带刚体,一开始效果跟运动的物体带刚体一样,但由于刚体放在静止的物体上会休眠,所以一般要将刚体放在运动的物体身上。简而言之就是至少要有一方有刚体,一般为运动方。

注:如果运动的一方无刚体,它去碰撞静止的不带刚体的物体,相当于没有撞上,即使双方带碰撞体也会相互穿过。

       如果运动的一方有刚体,它去碰静止的不带刚体的物体(即没有物理演算),则该物体不会因为被碰撞而发生移动。

总的来说,如果想要两个物体碰撞后都有因为物理演算而发生位移,则双方都要有刚体和碰撞器。

二:接触的两种方式

1:Collision碰撞,造成物理碰撞,可以在碰撞时执行OnCollision事件。

2:Trigger触发,取消所有的物理碰撞,可以在触发时执行OnTrigger事件。

注:两个物体接触不可能同时产生碰撞+接触,最多产生一种。但是可以AB产生碰撞,AC产生触发。

 

三:产生不同方式接触的条件

1:Collision碰撞

     (1):双方都有碰撞体

     (2):运动的一方必须有刚体

     (3):双方不可同时勾选Kinematic运动学。

     (4):双方都不可勾选Trigger触发器。

2:Trigger触发

     (1):双方都有碰撞体

     (2):运动的一方必须是刚体

     (3):至少一方勾选Trigger触发器

 

四:接触后事件细分为Enter,Stay,Exit三种(以Trigger为例,分别为OnTriggerEnter、OnTriggerStay、OnTriggerExit)

1:Enter事件表示两物体接触瞬间,会执行一次。

2:Stay事件表示两物体持续接触,会不断执行。

3:Exit事件当两物体分开瞬间,会执行一次。

 

五:OnTriggerEnter这类的属于Trigger触发,OnCollisionEnter这类的属于Collision碰撞

 

总结:OnTriggerEnter和OnCollisionEnter的选择。

如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。

如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。

你可能感兴趣的:(Unity)