【unity笔记】OnCollision和OnTrigger方法使用的一个误区【2D】

这篇具有很好参考价值的文章主要介绍了【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上,而碰撞器(也许一个,也许有多个)在子对象上。

【unity笔记】OnCollision和OnTrigger方法使用的一个误区【2D】

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

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

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

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

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

正确做法:文章来源地址https://www.toymoban.com/news/detail-431615.html

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

到了这里,关于【unity笔记】OnCollision和OnTrigger方法使用的一个误区【2D】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript 使用误区

    在使用 JavaScript 进行开发时,有一些常见的误区需要注意。以下是一些常见的 JavaScript 使用误区: 1. 不使用严格比较运算符:JavaScript 提供了松散比较运算符(例如`==`),它会自动进行类型转换。这可能导致一些意外的结果。建议始终使用严格比较运算符(例如`===`),它不

    2024年02月06日
    浏览(20)
  • 电脑知识:关于电脑使用的误区

    本文是向大家介绍关于电脑使用的误区,电脑是较为贵重的一个电子产品,熟练掌握基本的电脑操作技巧应该是每一个人必备技能。在使用技巧之外,有一些误区是需要我们知道并避免的。 很多电脑小白关电脑都是直接按开关按钮或者直接拔电源的,这种暴力关机的行为,对

    2024年02月04日
    浏览(64)
  • 【HoloLens2】【Unity】【MRTK】开发笔记(一):创建第一个项目

    前言 标题这三者的关系是:假如这里有一个电子厂,Unity是机床,MRTK是零件和螺丝刀,HoloLens2是超市货架。最后在机床上生产出的商品要摆到货架上售卖。机床官方建议用Unity,但Unreal也是很不错的选择,只是部分微软云服务暂时还不支持。 本电子厂女工将从零开始生产一个

    2024年02月10日
    浏览(32)
  • Unity学习笔记 - 第一个Hello World都算不上的项目

            这里不细说安装了,首先需要Visual Studio,然后要安装Unity Hub,Unity Hub就像一个管理平台,安装完它之后,可以在它的界面上选择安装各个版本的编辑器。 开始您的创意项目并下载 Unity Hub | Unity 通过 3 个简单的步骤下载 Unity,开始使用世界上颇受欢迎的开发平台,

    2024年04月12日
    浏览(30)
  • Kafka最佳实践-Kafka常见的使用误区

    1.kafka集群单个节点磁盘挂载的越多越好 业界Kafka的标准使用方式是作为临时缓存使用。因此,很多人会误以为,kafka的每个节点只要存储够大就行,不用关心其他的指标。官方并不建议kafka单节点关在多个磁盘,因为磁盘越多,表示需要更多的处理线程去管理(num.io.thread决定

    2024年02月04日
    浏览(23)
  • Unity中获取一个物体下所有的子物体的方法

    方法1(获取全部子物体,无论子物体SetActive是否为true): 获取全部子物体后,可通过list列表对物体进行批处理; 如添加或移除其子物体的组件,判断其子物体是否有某个组件等等。 方法二(推荐): 该方法为Unity内置的API,会查找物体下对应类型的全部组件; ( 注意:

    2024年02月13日
    浏览(30)
  • unity学习笔记-延迟执行方法

    我辣鸡,不会用

    2024年02月06日
    浏览(26)
  • Milvus的性能优化技巧、十大使用误区、四大一致性等级

    在部署 Milvus 之前,首先需要决定机器的资源、规格、以及一些依赖的资源,以下是你需要考虑的因素: 有多少张表? 每张表的数据量有多少? 每张表的 QPS 需求有多少? 是否需要存标量字段,如果有字符串,字符串的平均长度是多少? 是否有删除和流式插入,每天大概有

    2024年01月23日
    浏览(35)
  • Unity学习笔记--详细介绍CacheServer、部署方法、以及在Unity中的位置

    最近实习,导入项目的时候非常慢,和leader吐槽了下,他说可以使用CacheServer,导入速度会快一点。没听说过这个名词,leader帮忙解释了下,理解了。今天在网上搜索关于CacheServer的知识,故写此文章,和大家一起学习。 CacheServer是Unity提供的一个高速缓存服务器,用于存储导

    2023年04月24日
    浏览(37)
  • 程序员自学编程的一些误区,你中招了没?自学编程到底为什么重要?给你分享我的5个高效学习方法

    今天又来分享干货了 今天讲一下 就是之前朋友们提的一个问题 就是如何来自学编程 我今天来讲一些 自学编程的话其实最重要的是什么 其实就是一个驱动力 也就是你学习他的目标是什么 很多人没想明白这点就开始去跟着学 最终学的比较痛苦又没有结果 我在高中的时候家里

    2023年04月21日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包