【问题标题】:Move specific object through another specific object while both have colliders将特定对象移动通过另一个特定对象,同时两者都有碰撞器
【发布时间】:2018-07-02 00:53:31
【问题描述】:

我有一个对象Enemy 和另一个Wall

敌人有一个CapsuleCollider,而墙有一个BoxCollider

墙会阻止玩家穿过它。但我希望敌人可以穿过墙壁。

我尝试的是设置一个array,其中包含我希望敌人通过的所有墙壁,而不是忽略对敌人物体的碰撞:

for (var i = 0; i < wand.Length; i++)
{            
    Physics.IgnoreCollision(wand[i].GetComponent<Collider>(), GetComponent<Collider>());
}

但是当他们试图穿过它时,他们仍然会被墙挡住。

我不能将敌人的对撞机设置为触发,因为我需要碰撞来防止它们穿过其他物体。

我也在那个网站上试过这个: https://forum.unity.com/threads/ignore-collisions-by-tag-solved.60387/

function OnCollisionEnter (collision : Collision) {

    if (collision.gameObject.tag == "Wall") {
    Physics.IgnoreCollision(collision.collider, collider);
        }

}

但它也不起作用。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 将墙壁放入 Walls 层,将敌人放入 Enemies 层,然后进入物理选项并设置这两层不发生碰撞。
  • @Lestat,请给出正确答案
  • 完成@RodrigoRodrigues
  • 谢谢。 answer as comment 一直是 SO 中一个难以解决的问题。 (见meta.stackoverflow.com/questions/251597/…

标签: c# unity3d


【解决方案1】:

将它们放在不同的图层中,然后将它们设置为不会相互碰撞。

    1. 将墙添加到“墙”层。
    1. 将敌人添加到“敌人”层。
    1. 转到编辑->项目设置->物理。并停用这 2 层之间的碰撞。

【讨论】:

  • 虽然这应该可行,但我认为 OP 希望在运行时执行此操作,以便能够启用/禁用与某些特定对象的冲突。这就是我对此的感受。我可能错了
  • @Programmer 我不需要在运行时更改它,所以这就足够了,但不幸的是,他们仍然无法穿墙。
  • @AlpakaJoe 如果您不需要在 tun-time 期间对其进行更改,那么这个答案就是您正在寻找的并且应该可以工作。 1.将编辑添加到您的问题中,并提供您在物理设置中所做的屏幕截图。 2.Also 选择您要制作的对象通过另一个并截取它们的“检查器”选项卡并发布它们。有了这两个,我们可以解决您的问题。
  • 你如何移动敌人?如果您使用导航网格,那么敌人确实会被墙壁阻止,因为导航网格是这样建造的,所以在没有墙壁的情况下构建导航网格(烘烤时禁用它们),就是这样
猜你喜欢
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2013-02-26
  • 1970-01-01
  • 2015-04-03
相关资源
最近更新 更多