使两个物理对象不发生碰撞,但在 Unity 中检测碰撞

2024-01-06

我有一个 Unity 项目,其中有一个 2D 游戏世界,其中包含静态碰撞器,以使几何体对于居住在其中的角色来说是实体的。玩家是一个动态碰撞器(具有非运动学刚体)。还有一个敌人角色,它也是一个动态碰撞器。两个角色都像我期望的那样在地板上行走并撞到墙壁。

我想要实现的是,玩家和敌人彼此之间并不固定,因此他们可以相互移动。我通过将敌人和玩家放在不同的层上并设置碰撞矩阵来实现这一点,以便这些层不会相互碰撞。然而,我现在遇到的问题是,我确实想检测敌人和玩家是否遇到了对方。我向敌人角色添加了一个触发碰撞器,它位于敌人层上,这意味着它不会检测到与玩家的碰撞。

我想过为敌人制作一个子游戏对象,将其放在玩家的图层上,为其添加刚体并触发碰撞器,并使用它来检测玩家和敌人之间的碰撞,但感觉如此复杂,让我想知道如果没有更优雅的解决方案。


编辑(2020-05-26):现在你可以告诉引擎忽略两个给定对象之间的碰撞 https://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html。感谢 Deepscorn 的评论。将保留答案的其余部分不变,并牢记这一点进行阅读。

是的,你需要创建一个孩子GameObject,带有触发碰撞器,并将其放在与玩家层交互的层中。

不,您不需要添加Rigidbody到新的GameObject,父级的刚体已经使其成为动态碰撞器,所以你会得到OnTrigger events.

附带说明一下,为了让事情井井有条,如果您创建敌人的子级,请勿将其放在玩家层中。例如,将来您可能需要禁用玩家与自身的图层碰撞。此外,如果你的玩家以这种方式与许多对象交互,我会在玩家而不是敌人上放置一个触发器,在一个单独的触发器上PlayerTrigger层,只是为了让事情简单。

难道就没有更简单的方法吗?并不真地。您肯定需要玩家和敌人碰撞器之间没有交互,但它们之间也需要某种交互。因此其中之一需要跨越两层,否则整个交互将由单个布尔值来描述。物理引擎一次性处理大量信息,因此您可以设置所需的所有图层和碰撞,但在物理循环期间您无法进一步控制发生的情况。您不能告诉引擎忽略两个对象之间的碰撞。只有 32 层,并且让它们以严格的方式运行实际上是大量优化。如果您担心创建另一个图层的性能,请禁用不需要的图层之间的交互,例如触发图层与地板和墙壁,或者甚至不接触的图层。

您的替代方案是通过代码完成这一切,这甚至不太优雅。播放器上的单个子胶囊现在听起来并没有那么糟糕,不是吗?

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

使两个物理对象不发生碰撞,但在 Unity 中检测碰撞 的相关文章

  • 由于对象的当前状态,操作无效 - Linq on List

    对列表运行 Linq 查询时会引发此错误 我使用 Unity3D 3 0 和 C Unity3D 使用 Mono 2 6 据我所知 Unity3D是单线程的 它的工作原理是将继承基类的 脚本 c cs 文件 附加到 GameObject 此
  • FindObjectOfType 返回 null

    我遇到的问题是我捡起一个掉落的物品 为枪添加弹药 使用所有方法和变量构建了一个 Gun 类 构建了一个从 Gun 类派生的 Rifle 类 步枪工作完美 没有任何问题 我现在添加一个 拾取 系统 其中 x 数量的敌人会掉落拾取 这是要拾取的
  • Unity3D:在 AA 解析后绘制粒子以提高性能

    我正在尝试评估 MSAA 对 Unity 中含有大量粒子的场景的影响 为此 我需要 使用 8x MSAA 绘制场景中的所有非粒子对象 使用上一个通道中解析的深度缓冲区来渲染所有 将非遮挡粒子系统转移到较小的渲染目标上 将 2 的颜色缓冲区与
  • Unity-3d-5 将 16:9 的图像缩放至其他分辨率

    所以我创建了一个蛇游戏 其边框是用 2d 精灵创建的 我将游戏窗口设置为 16 9 在此分辨率下图像看起来不错 然而 扩展到其他任何东西开始让游戏看起来很奇怪 我想要调整游戏窗口的大小 如何让我的精灵根据当前分辨率拉伸和收缩 我已经尝试创建
  • 创建对话框/弹出窗口

    有这样的代码 bool b EditorUtility DisplayDialog Test Reset or continue Reset Continue if b ResetGame 但它仅在编辑器中有效 在游戏中无效 如何将 Edi
  • 二维数组中的寻路

    假设我有这个二维数组地图 0 0 0 0 7 1 1 1 1 1 1 1 1 0 7 7 7 7 1 1 1 24 1 1 1 1 0 7 24 24 24 24 24 24 24 1 1 3 1 0 7 23 23 23 23 23 23
  • UV 展开运行时优化

    我正在尝试在运行时创建 UV 我使用 BOX 类型 UV 类似于 3ds max 中的 BOX UVW 并基于面方向进行计算 我知道将其创建为运行时不是一个好的选择 但我别无选择 它是在计算后保存的 所以我做了一次 但我花了 40 秒处理
  • Unity3d 中的多线程脚本调用

    我试图在Unity3d中实现多线程脚本执行 但是Unity库似乎没有提供方法 我们必须使用Mono提供的System Threading 但他们提到 Unity Scripting 不是线程安全的 我可以使用 System threadin
  • foreach 循环为 Unity 中的按钮赋值时出现问题

    我正在尝试在 Unity 中为我的游戏制作一个类似 Candy Crush 的地图 我正在尝试将所有按钮收集到一个数组中 然后设置其 onclick 属性 这样当我单击它们时 我就可以达到我想要的级别 我正在使用 Foreach 循环来实现
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • 在浏览器中以低延迟捕获声音输入

    是否可以在浏览器中捕获低延迟的声音输入 主要用于录制吉他 我知道这也取决于硬件 但我们假设硬件足够好 我尝试使用 Web Audio API 但它的延迟有点糟糕 是否还有其他技术可以在浏览器中提供高性能的声音输入捕获 可以使用Unity3D
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Unity 中图像的 onClick 事件

    是否可以在 Unity 中将 onClick 功能添加到图像 画布的组件 var obj new GameObject Image NewImage obj AddComponent
  • 优化 - 步进可能表现奇怪:iOS/Unity

    我正在尝试将 Unity 集成到 iOS 应用程序中 我已经遵循了这个教程http www agnosticdev com blog entry swift integrating unity and vuforia ios swift p
  • 画布未在顶部渲染

    我使用画布和 Unity UI 元素作为 HUD 我希望 HUD 能够领先于一切 但事实并非如此 以前没有使用过 Cardboard 但我相信你可以通过相机剔除来解决这个问题 只需按照以下步骤操作 Canvas 1 选择Canvas并将图层
  • 如何让游戏音频在某个点循环播放

    我的游戏中有一场风暴 所以我制作了一个环境音频文件 它慢慢成长为一场风暴 雨逐渐消失 然后变成一个可循环的风暴音频文件 我是这样做的 Play intro clip and merge into main loop var introTim
  • 统一的阿拉伯语输入字段

    有没有办法将输入字段的语言统一更改为阿拉伯语 我尝试了ArabicSupport 它正确显示了阿拉伯语 但将其与输入字段一起使用却不起作用 因为 GameObject Find input field GetComponent
  • 将旧的 Unity 代码升级到 Unity 5

    在触发按钮上播放动画的代码似乎不起作用 我在 Youtube 上看到了一个视频 内容很简单animation Play 它可以在该视频上运行 但我无法让它在我的计算机上运行 我做错了什么还是团结改变了它 请帮助我在网上找不到解决方案 所有
  • 将物体放置在相机前面

    这应该是一项简单的任务 我已经用谷歌搜索过了 但我不明白为什么这些例子对我有用 基本上 我想在我的第一人称游戏中将瓷砖放在地上 我希望我想要放置在地面上的物体 漂浮 在半空中 同时为其选择完美的位置 我可以实例化该对象 使其成为玩家相机的子

随机推荐

  • NHibernate 属性公式过滤器

    我有以下课程 MyClass public virtual int Id get set public virtual int Code get set public virtual int Description get set publ
  • 如何将文件下载到本地下载文件夹?

    我使用 WebView 启用了文件的下载设置 我正在使用 DownloadManager 保存文件 但这些文件不会出现在本地下载目录中 我下载的文件保存在这里 gt file storage emulated 0 Android data
  • 带有 NULL 的指针算术

    有人可以解释一下为什么 int main void char a NULL int b NULL double c NULL printf n d d d n d d d n n int a 1 int b 1 int c 1 int a
  • Windows 在哪里存储 ACL,ACL 是否跟随文件从一台计算机传输到另一台计算机?

    我们的应用程序使用的组件需要在可执行文件的目录中包含许可证文件 该文件恰好是 NET WinForms 应用程序 尽管我认为这对这个问题并不重要 当安装在某些 XP Pro 计算机上时 迄今为止仅数百台计算机中的三台 该组件会引发许可证异常
  • 去掉itextsharp中的左右侧边框,想要一个矩形框

    Remove the left and right side borders of Approved By and sign and also i need to draw a small rectangular box after cal
  • 无法打开自定义文件扩展名

    我有一个我希望支持的文件格式 它只是一个 zip 但我已将其重命名为 amg 以便我的应用程序可以读取它 在我的带有姜饼的三星手机上 它工作正常并且可以打开 在我的带有 Kitkat 的摩托罗拉手机上 我得到的只是无法打开它 我尝试过这里找
  • 使用 Lua I/O 函数创建新文件

    我开始学习io 函数 并尝试在我的代码中实现它们 我一直在寻找这个问题的答案 但似乎没有任何明确的答案是或否 或者至少我没有看到 我希望这里有人能知道答案并能够提供帮助 我想创建一个可以随着时间的推移写入的文本文件 它基本上是一个日志 我将
  • 为什么要禁用 IpV6 Hadoop 安装

    我已经在 Ubuntu 系统上成功安装并运行 Hadoop 我正在关注一些文章的教程 我很困惑为什么每一步都建议禁用 ipv6 如果我不在系统上禁用 ipv6 会有影响吗 有谁能回答一下吗 就像声明的那样here http wiki apa
  • CKEditor:在粘贴上应用removeFormat

    我已经成功地设置了一个粘贴事件来捕获粘贴到文本区域的 HTML 我需要在将 HTML 粘贴到文本区域之前或之时自动将removeFormat 命令应用于该 HTML 以便我可以去除其中的类 各种标签和其他属性 有人可以指出我正确的方向来正确
  • VBA“ThisWorkbook.Close”不关闭此工作簿!

    我正在 Excel 中编写一个 VBA 宏 该宏应该打开 fileB xls 然后在打开后立即关闭 由于我们将讨论 3 个 Excel 文件 因此我将第一个文件命名为 fileA 文件 A 用户窗体上按钮的代码如下所示 Private Su
  • 一个应用程序中哪一个应该是单例? MongoClient 还是 MongoDatabase 还是 MongoCollection?

    正如文档中提到的 http mongodb github io mongo java driver 3 3 driver getting started quick tour http mongodb github io mongo jav
  • 错误“此方法必须返回 int 类型的结果”?

    我下面有这段代码 它不断告诉我Thanksgiving 必须返回int 类型的结果 我已经投射了所有结果只是为了确定 但似乎没有任何效果 为什么我会收到此错误 public class Thanksgiving private static
  • 检测 Android 4.0+ 上的屏幕截图尝试

    我正在开发一个 Android 应用程序 该应用程序高度重视保护用户的数据 以至于不会在本地设备的持久内存中存储任何内容 为了进一步保护用户数据 每当有人尝试截取活动应用程序的屏幕截图时 我们都希望向我们的服务器发出 Web 服务调用 到目
  • Python 和 Selenium 移动仿真

    我正在尝试使用 Selenium 仿真和 Python 来模拟 iPhone X 的 Chrome 如下所示 from selenium import webdriver mobile emulation deviceName iphone
  • Google App Engine 上的 django-nonrel - 对 ManyToMany 使用 ListField 的影响

    我正在开发 Google App Engine 应用程序 对此我还比较陌生 我已经在 Django 中构建了一个应用程序 并拥有一个使用 ManyToMany 字段类型的模型 我知道 django nonrel 不支持 Django 的多对
  • 将电子邮件读入 SQL 数据库的 .net 代码

    我正在寻找一些链接和 或代码片段 这些链接和 或代码片段将允许 ASP NET 网页 或者 Outlook 加载项 允许我阅读发送到特定电子邮件地址的电子邮件 然后解析电子邮件将消息分成组成部分 即主题 正文 附件等 并保存到我的数据库中
  • 在 R 中通过列名和行名连接矩阵

    我想通过 R 中的列名和行名连接矩阵 m1 matrix c 1 2 3 11 12 13 nrow 2 ncol 3 byrow TRUE dimnames list c r1 r2 c a b c m2 matrix c 4 5 0 2
  • 如何在React-Native中共享生成的二维码?

    我使用 react native qrcode svg 生成了 QR 代码 我想通过电子邮件或类似的方式使用 React native 的共享模块共享此 svg import Share from react native import Q
  • python中3D曲面图的颜色

    我使用以下行来绘制 3D 曲面 surf ax3 plot surface X Y Z rstride 1 cstride 1 alpha 0 5 linewidth 0 cmap cm jet antialiased True 现在颜色非
  • 使两个物理对象不发生碰撞,但在 Unity 中检测碰撞

    我有一个 Unity 项目 其中有一个 2D 游戏世界 其中包含静态碰撞器 以使几何体对于居住在其中的角色来说是实体的 玩家是一个动态碰撞器 具有非运动学刚体 还有一个敌人角色 它也是一个动态碰撞器 两个角色都像我期望的那样在地板上行走并撞