2016-06-22 16 views
1

私のゲームでは、弾丸を噴射する銃があり、弾丸と衝突してgameObjectを破壊しようとしています。弾丸は、1つのgameObject(Capsule)に基づいています。私はこれまでのところ、これらの2つのスクリプトを試してみた:弾丸で撮影したときにオブジェクトが破壊されない - UNITY3D C#

using UnityEngine; 
using System.Collections; 

public class whenshot : MonoBehaviour { 

void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.name == "Bullet") 
    { 
     Destroy(col.gameObject); 
    } 
} 
} 

と:

using UnityEngine; 
using System.Collections; 

public class whenshot : MonoBehaviour { 


void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.name == "Bullet") 
    { 
     Destroy(this); //the difference between the two is that I changed "col.gameObject" to "this" 
    } 
} 
} 

私は被写体を撮影していますが、それは自分自身を破壊/消えていません。これをどうすれば解決できますか? Visual

+0

元のコードが弾丸を破壊していたようですが、弾丸が破壊されたとは限りません。 –

+0

次のコード行を関数の先頭に追加し、 'Debug.Log(" name: "+ col.gameObject.name);'、 'Debug 'を再試行したときにログに表示される内容を教えてください。ログメッセージが表示されない場合は、Log( "matches:" +(col.gameObject.name == "Bullet")。ToString()); –

+0

@SCottChamberlainログがコンソールの下にある場合、ログメッセージは表示されませんでした。 –

答えて

0

は、これは私がしばらく前に作られた2Dゲームの例ですが、私はそれが役立つかもしれないと思う:それは場合に役立ちます

はここで視覚的です。

void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.tag == "Destroyable") 
    { 
     Destroy(other.gameObject); 
    } 
} 

プレイヤーは、彼らに何度も撮影するだけで3Dの衝突やトリガーにそれらを切り替えて、それはyaのためにトリックを行う必要があるだろうというとき、私は(私は^^願って)特定のブロックを破壊するためにこれを使用していました。

編集:このスクリプトはあなたの弾丸に取り付けなければならないプレハブ

this
+0

はここにある私は、コードの間違ったをやったことができ、動作しませんでした.gameObject); } } } コリダーやトリガーで何かする必要がありますか? –

+0

はそのコードが弾丸を破壊するように見えますが、あなたはまたあなたが射撃しているターゲットオブジェクトを破壊しなければならないでしょう。 "Enemy"などでブロックして、Collisionでそれらを破壊しようとするタグ – K0D3R

+0

これを行うための別のコードを私に提供できますか?申し訳ありません3日前のようにUnityを始めましたので、私はかなり新しいです。 –

4

、すなわち、発信者(this is basic OOP)のオブジェクトインスタンスを参照whenshotはなく、gameObject。したがって、2番目のサンプルは、それが添付されているgameObjectからスクリプトのインスタンスを効果的に実行しています。

最初のスクリプトは、技術的に微細で、かつ動作する必要があり、これらの条件が満たされて提供:

  1. 弾丸(弾丸)またはターゲット(あるいは両方)取り付け非運動剛体成分を有します。 (Unity docs.
  2. どちらも3D Colliderコンポーネントを持っています。
  3. 毎秒の名前です。ターゲットと衝突する弾丸gameObjectは、正確には "Bullet"です。
  4. すべての発射オブジェクトには、このスクリプトがコンポーネントとして含まれています。

ヒント

使用プレハブとタグ:原始あなたの弾丸を取り、プレハブとして保存。 "Bullet"というプレハブにタグを追加します。ターゲットに対しても同じ操作を行い、ターゲットとしてタグ付けします。プレーヤーに「プレーヤー」とタグを付けます。 "gunController"では、箇条書きのプレファブへの参照を設定し、使用しているどのトリガでも箇条書きをインスタンス化するようにします。 銃弾のスクリプトでは、==の代わりにCompareTag("Target")を使用し、ターゲットgameObjectとthis.gameObjectの両方を破棄します。

これは私が思うように、あなたが望む動作です。そうであれば、衝突と破壊の間に遅延がないため、物理学をシミュレートする必要はありません。弾丸/ターゲットと他の物理的なやりとりがある場合を除き、剛体のないものをトリガーとしてマークします。

ユニティチュートリアルを行く強い提案。

0

私はそれを理解しましたが、それは奇妙ですが、明らかに弾丸を速く動かしていました... "Bullet_Forward_Force"フロートを約150フィートまで減速して動作させる必要がありました。答えた人のおかげで

0

私は答えを行いますので、コメントすることはできません。

は、あなただけのcontiniousダイナミックに衝突検出設定、弾丸が速く行くことができます。

成功率はほぼ100%です。

+0

ありがとう、私はできるときにそれを試してみます。 –

関連する問題