Unity3D碰撞需求

问题描述:

我正在制作一个标题,玩家可以在其当前位置放置炸弹。问题是,我怀疑,玩家不能穿过任何放置的炸弹(除非他拿起一个特定物品)。Unity3D碰撞需求

但是,一个非触发对撞机的原因是,放置炸弹推开玩家(也许是在他最终卡住的墙上),这似乎不是方式。

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

更新(回答程序员评论)

如果炸弹撞机并不意味着作为触发,这将导致汽车碰撞行为,谁丢弃炸弹作为他的当前位置的球员,推在任何方向,这是事件不是希望的行为,因为玩家也可以推到墙上,他不能出去。

更新

炸弹撞机最初设置为触发和所连接的脚本看起来像这样(由吉荣。德克拉克答案后):

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; 
    } 
} 

,如果该玩家收集的物品,其允许他通过炸弹行走,他自己的图层将更改为指定的玩家图层,而不会与炸弹相撞!

+0

假设你可以使用图层与哪个图层进行交互,你可以在Unity Docs中阅读更多[here](https://docs.unity3d.com/Manual/LayerBasedCollision.html)。 – Thalthanas

+0

*“但是,一个非触发对撞机的原因,放置炸弹将玩家推开(也许是在他最终卡住的墙上),这似乎不是方式。”*请解释你的意思。你需要非触发对撞机来防止碰撞,否则你将不得不写一些疯狂的代码。 – Programmer

+0

@EmreE:感谢您的链接,但图层似乎不是正确的方式,因为基本上我希望玩家碰到炸弹,但不是当他们放置它们时 –

只要你产卵了;用一个脚本和不活动的对撞机产生一个无形的gameobject。让脚本检查是否有人在对撞机中,只要他外出时激活对撞机。确保它是一个死在一起的炸弹的孩子。至于你的特殊项目,只需将方法添加到相同的脚本,该脚本被称为停用对撞机,并覆盖对球员的检查。

+0

听起来很棒,我会尝试一下并尽快给你一个反馈 –