2017-04-13 16 views
0

1.私は、ontriggerenterを使用して、大砲ボールが2Dゲームで別の船に当たったときを見つけるスクリプトを作成しました。 WASD(ShipWASD)を使用して制御されるオブジェクト間の衝突を無視する方法

private void OnTriggerEnter(Collider other) 
{ 


    if (other.tag != "cannonBallWASD") 
    { 
     return; 
    } 

    Destroy(other.gameObject); 
    Destroy(gameObject); 
    Debug.Log(other); 
} 

2.船は、矢印キー(ShipArrows)を使用して制御された第2船で砲弾(cannonballWASD)を発射します。このコードは、ShipArrowsに添付されたスクリプトにあります。

3.私は海に落ちているように境界を残している砲弾を破壊するメッシュレンダラー(The Boundary)なしで立方体を使用するコードを別に用意しています。これは2人プレイゲームです。

4.ここに問題があります - 境界が船で動くように、それは船の船尾の子供です。私が大砲を発射するとき、大砲は船の衝突者の代わりに境界線に当たる。境界線を取り除くと、それは船に当たりますが境界線は私が望むものです。

5.境界線と船舶の両方にトリガー・コライダーが必要です。このスクリプトの境界を無視する方法はありますか?次のスクリプトでは無視しないでください。

private void OnTriggerExit(Collider other) 
{ 
    if(other.tag != "cannonBallWASD" && other.tag != "cannonBallArrows") 
    { 
     return; 
    } 
    Destroy(other.gameObject); 
} 

このスクリプトは、彼らがShipArrows境界を出るときにそれらを破壊することによって、海に落ちているようShipArrowsの砲弾が見えるのです。 (どちらの船もこれを行います)

+0

だから、船に乗っているときに境界線が誘発されるのですか? – CNuts

+0

なぜターゲット船にバウンダリが取り付けられていますか?あなたが砲弾を落としたければ、彼らは射撃船の境界から外れて海に行くべきです。射撃船の境界は明らかに他の船の砲弾を無視します。逆の場合は –

+0

「タグではないならば」タグを実行し、必要なコードをifに入れて残りを無視します。 IE 'if(other.tag ==" theTagToDoCodeOn "){コード}'私のように、物事があなたの '帰ってきたら' –

答えて

1

衝突を無視するには、Physics.IgnoreCollisionを使用してください。

また、レイヤーの衝突を無視するために使用されるPhysics.IgnoreLayerCollisionもあります。

無視するすべてのオブジェクトをレイヤーに配置し、そのレイヤー上のレイヤーを無視するように関数を呼び出すだけです。

Physics.IgnoreCollision(yourFirstCollider, yourSecondCollider, true) 

又は

Physics.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, true); 

リセット/認識コリソン2D

はコリソン3D無視

Physics2D.IgnoreCollision(yourFirstCollider, yourSecondCollider, false); 

又は

Physics2D.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, false) 

両方のレイヤーが同じである必要はありません。異なるレイヤーからのオブジェクトの衝突を無視することができます。 >プロジェクト設定 - >プロジェクトの設定 - - >物理 - >又は編集これは、各ゲームオブジェクト層を割り当て、編集に移動してコードなしエディタを介して達成することができます - >Physics 2D次に、そこからどのレイヤーを衝突させるかを設定します。

関連する問題