unity笔记OnCollision和OnTrigger方法使用的误区2D
最近在做2D游戏,所以经常使用到两个检测碰撞的方法。
OnCollisionXX()方法或OnTriggerXX方法,两个方法的使用大致相同,传入的参数略有差别:
-
void OnCollisionEnter2D(Collision2D collision) { }
-
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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22