Unity3D按需冲突

时间:2017-08-05 13:56:41

标签: c# unity3d collision

我正在制作一个标题,玩家可以在当前位置投下炸弹。问题是,我想,玩家不能穿过任何放置的炸弹(除了他拿出一个特定的物品)。

但是一个非触发式对撞机导致放置炸弹将玩家推开(可能进入墙壁,他最终卡住了),这似乎不是那样。

那么是否有任何简单的方法来启动与炸弹的碰撞,这会阻止玩家基于脚本移动,或者我是否必须检查玩家采取的每一步,如果他会与炸弹碰撞并停止移动? / p>

更新(程序员评论回答)

如果炸弹对撞机不是一个触发器,它会导致自动碰撞行为,那么将炸弹作为当前位置掉落的玩家会向任何方向推开,这不是所希望的行为,因为玩家也可以推到墙上,在那里他无法离开。

更新(在Jeroen De Clercq回答之后)

炸弹对撞机最初设置为触发,附加的脚本如下所示:

public class Bomb : MonoBehaviour
{
    private SphereCollider collider;

    // Use this for initialization
    void Start()
    {
        collider = GetComponent<SphereCollider>();
    }

    // Update is called once per frame
    void Update()
    {
        Collider[] collidings = Physics.OverlapSphere(gameObject.transform.position, 1);
        if (!collidings.Any(s => s.tag.Equals("Player")))
            collider.isTrigger = false;
    }
}

如果玩家收集了允许他穿过炸弹的物品,他自己的图层将被更改为指定的玩家图层,不会与炸弹碰撞!

1 个答案:

答案 0 :(得分:1)

当你生弹炸弹时;产生一个看不见的游戏对象,上面有一个脚本和非活动对撞机。在脚本激活对撞机时,让脚本检查是否有人在对撞机中。确保它是炸弹的孩子,就像他们死在一起一样。至于你的特殊项目,只需将方法添加到被调用以停用对撞机的同一个脚本,并覆盖对玩家的检查。