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

2023-11-03

最近在做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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • WKWebView 使用和坑

    iOS8以后 苹果推出了新框架Wekkit 提供了替换UIWebView的组件WKWebView 各种UIWebView的问题没有了 速度更快了 占用内存少了 一句话 WKWebView是App内部加载网页的最佳选择 先看下 WKWebVi
  • docker 安装 mongodb

    1 拉取最新的镜像 docker pull mongo latest 2 运行容器 docker run itd name mongo p 27017 27017 mongo auth 参数说明 p 27017 27017 映射容器服务的
  • 堆排序(C)

    文章目录 堆排序 堆的定义 堆排序 构造大根堆 构造小根堆 实现堆排序 测试代码 算法复杂度 堆排序 堆排序的基本思想 对于一组待排序数据 首先按堆的定义建立初始堆 大根堆或小根堆 取出堆顶元素 最大或最小 将剩余的元素继续调整成新堆 就得
  • FeignClient带文件多对象传参

    生产者 ApiOperation value 切块上传 notes 切块上传 PostMapping uploadChunk public Result uploadChunk HttpServletRequest request Chun
  • C语言计算平均分

    已知某位学生的数学 英语和计算机课程的成绩分别是87分 72分和93分 求该生3门课程的平均成绩 结果按整型输出 输入格式 本题无输入 输出格式 按照下列格式输出结果 math 87 eng 72 comp 93 average 计算所得的
  • windows 重启进程和重启服务脚本

    重启进程 以重启远程粘贴板服务为例 已验证 taskkill F IM rdpclip exe 表示杀死进程 F强制杀死 IM 指定杀死的进程名 start rdpclip exe 启动进程 重启服务 未验证 net stop 服务名 ne
  • 自制JLink-ob-072

    陆陆续续的在网上查了两天资料 发现了三篇很有用的文章 一篇是关于固件的 一篇关于硬件的设计 一篇是教你怎么用usb接口给stm32刷固件 有了这三篇资料 自制一个Jlink ob 应该是没问题的了 下面放上链接 固件篇 http www o
  • 剑指offer——day3

    题目1 替换空格 char replaceSpace char s int i 0 int j 0 int len strlen s int cnt 0 for i 0 i lt len i if s i cnt char ans char
  • Ajax与Axios的区别

    目录 1 Ajax与Axios的区别 2 mvvm模式下更适合这种数据 3 ajax书写形式 4 axios书写形式 5 vue 中使用的 axios 代码 总结 1 Ajax与Axios的区别 Axios axios 是通过promise
  • 【技巧】Markdown 交叉引用

    注意 csdn 不支持 md 的跳转 可以使用 toc 生成目录 1 Markdown 引用同一个文件的某一标题 title title 使用 选中章节 将大写字母改成小写 去掉括号 等特殊字符 空格用 替代 2 Markdown 引用另一
  • spring框架历史漏洞复现

    目录 一 docker 1 启动docker 2 列出容器 3 关闭容器 4 进入docker 二 CVE 2016 4977 原理 1 登陆 2 访问url 3 构造payload 4 测试 5 反弹shell 6 编码后的命令结合poc
  • An ASIC Low Power Primer by J. bhaskar

    原文链接 https www academia edu 33242660 An ASIC Low Power Primer by J bhaskar Vlsi Design Power Electronics VLSI VLSI and C
  • jacoco简单教程

    问题 2023 06 06 10 45 52 974563 jacoco简单教程 答案 Jacoco是一个Java代码覆盖率工具 可以帮助开发人员了解他们的代码被测试的程度 以下是Jacoco的简单教程 添加Jacoco插件 在项目的bui
  • golang类型转换与类型断言

    类型转换在程序设计中都是不可避免的问题 当然有一些语言将这个过程给模糊了 大多数时候开发者并不需要去关注这方面的问题 但是golang中的类型匹配是很严格的 不同的类型之间通常需要手动转换 编译器不会代你去做这个事 我之所以说通常需要手动转
  • AD设置某个焊盘铺铜连接方式

    AD设置某个焊盘铺铜连接方式 在规则中创建个别焊盘铺铜连接方式 目的 PCB布板时 将表贴焊盘与铺铜连接方式设置为花焊盘 十字连接 将螺钉孔与铺铜连接方式设置为全连接 步骤一 所有焊盘与铜皮默认为十字连接 单独设置螺钉孔与铜皮全连接 步骤二
  • MYSQL相关问题解惑

    MYSQL如何查看默认存储引擎 方式1 使用show engines语句查看系统中所有的存储引擎 Support列的值表示某种引擎是否能使用 YES表示可以使用 NO表示不能使用 DEFAULT表示该引擎为当前默认存储引擎 方式2 也可以使
  • Linux基本操作指令

    Linnux课程框架学习 LINUX 初识阶段 常用操作 常用工具 1 Linux 系统编程阶段 1 gt 进程概念 2 gt 进程控制 3 gt 基础IO 4 gt 进程间通信 5 gt 进程信号 6 gt 多线程 2 LINUX 网络编
  • 魔兽怀旧服联盟服务器不稳定,魔兽世界怀旧服转服服务关闭最后一天,联盟部落新的对抗...

    魔兽世界这款经典了十几年的游戏有好多的话题可聊 不过恒古不变的热门话题中 联盟与部落的对抗永不过时 在经典怀旧服暂停转服服务即将到来的前一天 某知名论坛又出现了单边大服中阵营之争的唇枪舌战 具体是什么原因引起的 暂时还没有本服大佬出面解释
  • 最全的雅思8000词汇pdf_雅思剑桥1-14同义词汇总,屠鸭必备!(含剑14)

    剑14真题出来之后很多烤鸭私聊哥说什么时候有剑14的同义词替换啊 这不 哥这就来分享了 一个合格的雅思考生的词汇量要在7000左右 而在雅思考试中关于词汇的运用最重要的一部分是 同义词替换 同义词的考察贯穿了雅思考试听说读写的每一项 Lis
  • 【unity笔记】OnCollision和OnTrigger方法使用的一个误区【2D】

    最近在做2D游戏 所以经常使用到两个检测碰撞的方法 OnCollisionXX 方法或OnTriggerXX方法 两个方法的使用大致相同 传入的参数略有差别 void OnCollisionEnter2D Collision2D colli