繁体   English   中英

Unity3D按需碰撞

[英]Unity3D Collision on Demand

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

但是一个非触发式对撞机会导致放置炸弹将玩家推开(可能是撞到了墙,他最后被卡住了),但这似乎并非如此。

那么,是否有任何简单的方法可以使炸弹与炸弹发生碰撞,从而停止基于脚本的玩家移动,或者我是否必须检查玩家采取的每个步骤(如果他会与炸弹相撞并停止移动)?

更新(回答程序员的评论)

如果炸弹对撞机不是要触发的,这会导致自动碰撞行为,则将炸弹按其当前位置放下的玩家会朝任意方向推开,这不是期望的行为,因为玩家也可以被推到墙上,他无法走出去。

更新(在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;
    }
}

如果玩家收集了一个可以让他穿过炸弹的物品,他自己的图层将更改为指定的玩家图层,该图层不会与炸弹发生碰撞!

尽快产生炸弹; 生成带有脚本和不活动对撞机的不可见游戏对象。 使脚本检查是否有人在对撞机中,只要他外出就激活对撞机。 确保他们一起死亡是炸弹的孩子。 至于您的特殊项目,只需将方法添加到已被用来停用对撞机的脚本中,该方法也将对玩家进行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM