2017-08-05 10 views
0

私は現在の位置に爆弾を置くことができるタイトルに取り組んでいます。問題は、プレイヤーが置かれた爆弾を歩くことができないということです(彼が特定のアイテムを持っていない限り)。Unity3D Collision on Demand

しかし、非トリガーコライダーが原因で、爆弾を置くとプレイヤーが(おそらく壁に突き刺さり、最終的に詰まった場所に)押し込まれます。

爆弾との衝突を有効にする簡単な方法はありますか?プレイヤーの移動をスクリプトベースで停止するか、プレーヤーが爆弾と衝突して動きを止める場合は、各ステップを確認する必要がありますか?

更新(プログラマからのコメントへの回答)

爆弾コライダーは、自動衝突行動、彼の現在位置と爆弾を落としプレーヤーを引き起こすトリガーとして意図されていない場合は、プッシュされますいずれの方向にも離れていなくてはならない。これは、所望の行動ではないイベントである。なぜなら、プレーヤーはまた、壁に押し込まれ、そこから出ることができないからである。

更新爆弾衝突型加速器が最初に起動するように設定し、付属のスクリプトは次のようになりますされ

(イェルーン・デ・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; 
    } 
} 

を、プレイヤーはアイテムを収集した場合にどの彼は爆弾を歩くことができます、彼自身の層は、爆弾と衝突しない特定のプレーヤー層に変更されます!

+0

レイヤーがどのレイヤーと相互作用するかを推測するには、Unity Docsの[こちら](https://docs.unity3d.com/Manual/LayerBasedCollision.html)をお読みください。 – Thalthanas

+0

*「トリガーではないコライダーが原因で、爆弾を置くとプレイヤーが離れてしまいます(最終的には壁に突き当たってしまいます)。これはどういう意味なのか説明してください。衝突を防ぐには、トリガーなしのコライダーが必要です。そうしないと、クレイジーなコードを書く必要があります。 – Programmer

+0

@EmreE:基本的にプレイヤーが爆弾に衝突するようにしたいので、リンクはありがたいですが、レイヤーは正しい方法ではないようです。 –

答えて

1

すぐに爆弾を発射します。目に見えないgameobjectをスクリプトと非アクティブなコライダーで生成します。コライダーをアクティブにするとすぐに、誰かがコライダーにいるかどうかをチェックします。彼らが一緒に死ぬほど爆弾の子であることを確認してください。あなたの特別なアイテムについては、コライダーを無効にするために呼び出された同じスクリプトにメソッドを追加するだけで、プレーヤーのチェックもオーバーライドします。

+0

素晴らしいサウンド、私はそれを試し、あなたにできるだけ早くフィードバックを与えます –