Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity |如何使用复合碰撞检测使多个对象工作?_C#_Unity3d_Collision Detection - Fatal编程技术网

C# Unity |如何使用复合碰撞检测使多个对象工作?

C# Unity |如何使用复合碰撞检测使多个对象工作?,c#,unity3d,collision-detection,C#,Unity3d,Collision Detection,我目前正在尝试使用碰撞检测来选择目标(自动攻击)。我有两个对象(即一个玩家和一座塔),每个游戏对象都有一个对象层次结构: 在这里,对象具有: 目标球体用于提醒自身,当另一个物体进入该球体时,将其游戏状态从空闲更改为攻击模式 命中球体,这是物体受到伤害/接触其他物体目标球体的基本命中框 选择球体,它不与其他球体交互,而是用户可以选择对象的半径 基于此,我将每个子对象设置为具有球体碰撞器,并将其设置为与球体类型对应的层。下面是当前正在使用的物理碰撞表。我只希望HitBox层和目标层彼此交互

我目前正在尝试使用碰撞检测来选择目标(自动攻击)。我有两个对象(即一个玩家和一座塔),每个游戏对象都有一个对象层次结构:

在这里,对象具有:

  • 目标球体用于提醒自身,当另一个物体进入该球体时,将其游戏状态从空闲更改为攻击模式
  • 命中球体,这是物体受到伤害/接触其他物体目标球体的基本命中框
  • 选择球体,它不与其他球体交互,而是用户可以选择对象的半径
基于此,我将每个子对象设置为具有球体碰撞器,并将其设置为与球体类型对应的层。下面是当前正在使用的物理碰撞表。我只希望HitBox层和目标层彼此交互

尽管我尽了最大的努力,但当运行游戏并让玩家在球体中来回走动时,
OnTriggerEnter()
从未被调用。此方法位于父游戏对象上的player和towers类中。目前我在玩家和塔台上都并没有刚体,但在玩家和塔台的命中球上都有触发器,可以相互触发
OnTriggerEnter()

到目前为止,我已经尝试:

  • 将刚体添加到一个或两个父对象中
  • 将刚体添加到与我正在测试碰撞的碰撞球/目标球对应的一个子对象或两个子对象
  • 切换目标球体层和命中球体层的层顺序
  • 将目标球体切换为具有触发器而不是命中球体
  • 目标球和命中球都是触发器
  • 手动移动要碰撞的对象,而不是依赖于当前的移动系统
最后,这里是两个对象碰撞的图像,每个对象都位于彼此的球体内,但不调用彼此的
OnTriggerEnter()
。圆柱体轮廓来自NavMeshAgent控制器,我也曾尝试移除该控制器并对其进行测试,但均无效:(


TL;DR:试图在多个游戏对象上进行复合碰撞检测,但没有效果。

答案实际上隐藏在你的问题中

从Unity文档中可以找到:

注意:两个游戏对象都必须包含碰撞器组件。其中一个必须包含碰撞器组件 启用Collider.isTrigger,并包含刚体。如果两者都有 游戏对象启用了Collider.isTrigger,不会发生碰撞 当两个游戏对象都没有刚体组件时,同样适用

但根据你的帖子:

目前我在球员和塔上都没有刚体,但是 玩家和塔的命中都有触发器吗 球体将在OnTriggerCenter()上相互触发

因此,最快的修复方法听起来像是在你的塔中添加一个刚体。你也可以在你的玩家中添加一个刚体,但是确保你的碰撞矩阵将玩家从环绕触发球碰撞器中排除

最后,根据文档,一个触发器不会被另一个触发器触发


修复这些问题,您应该会看到您期望的行为。

我之前发布了这篇文章,但不知怎么的,我的评论被删除了。在我的帖子中,我还说:“到目前为止,我已经尝试过:向一个或两个父对象中添加刚体,或向一个或两个父对象中添加刚体,或向两个子对象中添加与我正在测试碰撞的碰撞球/目标球相对应的刚体。”我尝试向塔楼添加刚体,然后向玩家添加刚体,然后向两者添加刚体。
OnTriggerEnter()
仍然没有被调用。然后我尝试重复这个过程,只让其中一个对象有触发器,而不是两个对象都有。仍然没有成功。遗憾的是,问题是我的
OnTriggerEnter()
方法被键入
OnTriggerEnter()
我完全忽略了这一点。虽然这是问题所在,而且现在它起作用了,但我相信你的答案是我最初问题的正确答案