2017-08-05 75 views
0

我正在製作一個標題,玩家可以在其當前位置放置炸彈。問題是,我懷疑,玩家不能穿過任何放置的炸彈(除非他拿起一個特定物品)。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:感謝您的鏈接,但圖層似乎不是正確的方式,因爲基本上我希望玩家碰到炸彈,但不是當他們放置它們時 –

回答

1

只要你產卵了;用一個腳本和不活動的對撞機產生一個無形的gameobject。讓腳本檢查是否有人在對撞機中,只要他外出時激活對撞機。確保它是一個死在一起的炸彈的孩子。至於你的特殊項目,只需將方法添加到相同的腳本,該腳本被稱爲停用對撞機,並覆蓋對球員的檢查。

+0

聽起來很棒,我會嘗試一下並儘快給你一個反饋 –