衝突判定

 衝突判定だけ取り出して試験してみました。

状況

 発射されたボールが左の壁に当たり床に落ちるような状況を作りました。
 衝突判定を利用して床に落ちてしばらく経過したボールが消えるようにしたいと思います。

ボールの発射

  var clone = Instantiate(ball, transform.position, transform.rotation);
  clone.rigidbody.AddForce(-1000, 0, 0);
 特に問題なくいけました。幅は Scale で10ほどですが、意外と大きな力を加えないと飛ばないようです。

衝突判定

 床にスクリプトを追加して記述していきます。
function OnCollisionEnter(){
  print("Hit!");
}
 実行結果です。
 衝突判定できています。

謎のエラー

 ぶつかった相手を取得しなければならないので Collision 型で引数を指定します。
 これでぶつかった際の情報が変数 collision に格納されるはずでした・・・
function OnCollisionEnter(collision : Collision){
 Collision 型のパラメータでなければなりません!
 Collision 型にしているのに・・・
 公式からコピペしたのに・・・
function OnCollisionEnter(collision : UnityEngine.Collision){
 名前空間の問題だということは分かりましたが、常識のようで関連する内容を検索できませんでした。
 数十ページを開きましたがこの解決方法を示してくれたのは1ページのみでした。
using UnityEngine;
 C# はこのように名前空間を指定するらしいのですが。

完成品

function OnCollisionEnter(collision : UnityEngine.Collision){
  Destroy(collision.gameObject, 0.5);
}
 0.5s後に削除する命令を追加して完成です。
function OnCollisionEnter(collision : UnityEngine.Collision){
  print("Hit! > " + collision.gameObject.name);
}
 今回は衝突するオブジェクトが一つしかありませんが、幾つかのオブジェクトから特定のオブジェクトのみに作用させる場合は、名前を調べて条件分岐すればよいようです。