• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

unity笔记OnCollision和OnTrigger方法使用的误区2D

武飞扬头像
煮粥侠_99
帮助1

最近在做2D游戏,所以经常使用到两个检测碰撞的方法。

OnCollisionXX()方法或OnTriggerXX方法,两个方法的使用大致相同,传入的参数略有差别:

  1.  
    void OnCollisionEnter2D(Collision2D collision) { }
  2.  
    void OnTriggerEnter2D(Collider2D collision) { }

一个是Collision2D,一个是Collider2D,使用上大致也差不多。

以前没注意到具体的区别——甭管是 Collision 方法还是 Trigger 方法,要想获取检测到的对象,一律使用传入的参数.gameObject (例如collision.gameObject.CompareTag ("Tagxxxx") ),没出现过什么差错,直到今天报错才意识到,两个方法collision.gameObject返回的对象并一定不相同。


如果你同个对象的Collider 与 RigidBody 均挂在同一个层级上,且所有的物体皆是如此设计,就不用继续往下看了


具体的区别在于这种情况:

 - 假设一个物体有多个层级——如下图:Root 对象有多个子对象。Rigidbody放在父对象上,而Collider放在某个子对象上——比如“Collider child

为什么要这么做呢?有时,我不需要游戏对象发生任何运动、位移,但需要某些子对象和碰撞器运动。

比如一个“可以将拳头随意挥舞的石头巨人”,那么它的刚体可能在Root上,而碰撞器(也许一个,也许有多个)在子对象上。

学新通

当这个对象被子弹击中时,子弹监测到了碰撞,我要获取这个对象。我要得到的是 Root 对象,进而可以获取对象挂载的其他脚本。

子弹检测到的碰撞器是 Collider child

这时,使用参数collision时,collision.gameObject 返回的对象:

  • Collision方法:collision.gameObject 表示参与碰撞的对象,也就是 Root
  • Trigger方法:collision.gameObject 表示collider所挂载的对象,是 Collider child

由于这次我使用的是Trigger方法,返回了Collider child,无法获取脚本,于是获取了一个空引用报错。

正确做法:

  • Collision方法:collision.gameObject
  • Trigger方法:collision.attachedRigidbody.gameObject

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibacke
系列文章
更多 icon
同类精品
更多 icon
继续加载