首页 > 解决方案 > 将特定对象移动通过另一个特定对象,同时两者都有碰撞器

问题描述

我有一个对象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);
        }

}

但它也不起作用。

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

标签: c#unity3d

解决方案


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

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

推荐阅读