Unity 2Dゲーム作成 衝突判定スクリプトの編集について
Unity 2Dゲーム作成 衝突判定スクリプトの編集について 単純なゲームですが、 1、画面の下に地面がある 2、地面の上にPlayerがいる。Playerは横にスライド移動するだけ。 3、画面上から矢がランダムで落ちてくるのでPlayerはそれをよける。(画面左右にボタンがあって押すとPlayerが左右に動く) と、いうゲームを作っているのですが、「矢が地面やPlayerに当たった時に消える」設定の仕方がわかりません。(専門書を読み、厳密には現状でも消えてくれてはいるのですがその設定内容が気に食わないので質問しております) ヒエラルキーに矢の画像「Arrow」があり、スクリプト「ArrowController」がアタッチされています。 「ArrowController」の中身↓ using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArrowController : MonoBehaviour { GameObject player; void Start() { this.player = GameObject.Find("player"); } void Update() { // フレームごとに等速で落下させる transform.Translate(0, -0.1f, 0); // 画面外に出たらオブジェクトを破棄する if (transform.position.y < -5.0f) { Destroy(gameObject); } // 当たり判定 Vector2 p1 = transform.position; // 矢の中心座標 Vector2 p2 = this.player.transform.position; // プレイヤの中心座標 Vector2 dir = p1 - p2; float d = dir.magnitude; float r1 = 0.5f; // 矢の半径 float r2 = 1.0f; // プレイヤの半径 if (d < r1 + r2) { // 衝突した場合は矢を消す Destroy(gameObject); } } } この内容を以下のように変更したいのですが、どうでしょうか? 1、 // 画面外に出たらオブジェクトを破棄する if (transform.position.y < -5.0f) ではなく、「矢が地面と接触したら破棄する」に変更 2、 // 当たり判定 の部分より以下で 「矢とPlayerの中心座標から半径を指定し、接触したら矢を破棄」 になっていますが、 「コライダーで指定した範囲で矢がPlayerに接触したら矢を消す」に変更 Playerが設置している「地面」は現在ただの画像をヒエラルキーに設置しただけで画像の地面の部分にちょうどPlayerいるようにしているだけなので、上部タブのアセット→作成→スプライト→正方形でオブジェクトを作成し、Playerの足場になるように大きさ、位置を調整、透明にしてボックスコライダー2Dと2Dリジットボディを追加。 Playerと矢の設定でもコライダー2Dと2Dリジットボディを追加し、コライダー同士が接触したら矢が消えるというように変更したいです。 トリガーやタグで指定して矢を消す方法とオブジェクトの名前を指定して消す方法があると思いますが、オブジェクトの名前を指定して消えてもらう方法が知りたいです。よろしくお願いします。
ベストアンサー
コライダーの当たり判定の付け方はネットの記事を参考にした方がより詳しく載ってるでしょうから割愛。 // 画面外に出たらオブジェクトを破棄する の行より下の座標の計算は削除、Destory処理はOnCollisionEnter2D等の当たり判定関数に移植する事になるかと思います。 オブジェクトの名前はOnCollisionEnter2D等の引数を使って、 if(引数.gameObject.name=="〇〇")みたいに判定しましょう。
すみません初めて1ヶ月なのでそれがよく分かりません。 // 画面外に出たらオブジェクトを破棄する の下に入る構文全部教えて貰ってよろしいでしょうか? オブジェクトの名前は 地面→jimen プレイヤー→player です。「引数を使って」の「引数」の指定の仕方が複雑で困ってます。
質問者からのお礼コメント
ご回答本当にお世話になりました。(お金払いたいくらいです) 可能でしたらもう一つの質問も回答がないので頂けるとうれしいです。
お礼日時:1/24 14:40