X

Unityチュートリアル2Dシューティング4

三星です。
前回の続きです。
気になった言葉などのも出てきた都度説明を補足します。

スポンサードリンク




当たり判定とアニメーションイベントとレイヤー

今回のチュートリアルではプレイヤーとエネミーとその弾への当たり判定を作ります。
そして当たった時の爆発のアニメーションの処理を学びました。

Collider

Collider(コライダー)という判定機能を持つコンポーネント
Colliderは衝突(当たり)判定を可能にするものになります。
Phisix2Dコンポーネントの一つです。
色々種類があります。

プレイヤーに当たり判定を付ける

当たり判定を付けていきます。
この機能はコライダーを使います。

補足

Box Collider 2D

Box Collider 2D コンポーネントは 2D 物理挙動で使用するコライダー
コライダーの形状は四角形であり Sprite の位置、幅、高さを スプライト のローカル座標空間で指定します。四角形は軸に沿って位置し、四角形の辺はローカル空間の X 軸、または Y 軸に対して平行です。

他にもポリゴンコライダー、サークルコライダーが存在しますので形にあったコライダーを選択しましょう。

補足

プロパティー

クラスのメンバー変数 (フィールド) にアクセスするプロパティーの作成方法

プロパティー はコンポーネントのオプションや設定等をインスペクター内で編集することができます。

プロパティーは、参照 (他のオブジェクトやアセットとリンクします)と 値 ( 変数、チェックボックス、カラー等)に大きく分類分けをすることができます

参照

参照はインスペクター内のプロパティーに適切なタイプのオブジェクトやアセットをドラッグ&ドロップで割り当てることができます

値( Values )

ほとんどの値は型に応じてテキストボックス、チェックボックス、メニューを使用して編集できます。

Trigger (トリガー)

ONかOFFかの2択。
条件が満たされるとONになる。

当たり判定を付ける

コライダーの編集はPolygon Collider 2Dコンポーネントの「Edit Collider」ボタンを押すことで有効になります。
コライダーの形を編集した後IsTriggerのチェックボックスにチェックを入れるだけで当たり判定の計算をしてくれます。

スクリプトから当たり判定を検出する

「OnTriggerEnter2D」
オブジェクトにアタッチしたトリガーの中に別のオブジェクトが入ったときに呼び出されます。(2D 物理挙動のみ)
弾などがあたったときの処理に使います。

「OnTriggerStay2D」
トリガー状態のオブジェクトのコライダーと別のオブジェクトのコライダー衝突している間、毎フレーム呼び出され続けます。(2D 物理挙動のみ)
今回は使いません。

「OnTriggerExit2D」
トリガー状態のオブジェクトのコライダーと別のオブジェクトのコライダーが衝突から離れた瞬間に、呼び出されます。(2D 物理挙動のみ)
一定のエリアを離れたときに爆発する仕様の時に使います。

爆発の制御

アニメーションのインスペクター上に表示される「Loop Time」のチェックを外してください。 こうすることで爆発のアニメーションは1回のみ再生されます

スポンサードリンク




爆発した後のゲームオブジェクト削除

爆発のアニメーションがループしなくなったとしても、爆発のゲームオブジェクトは残り続けます
Destroy関数を使用してゲームオブジェクトを削除します

OnAnimationFinish ()

アニメーションの終了時に起動する関数です。

Destroy (gameObject);

オブジェクトを破壊する関数です。
Destroy (gameObject)でこのコンポーネントがアタッチされているオブジェクトが破壊されます。

弾とエネミーが削除されるエリアを作る

エネミーは延々と画面の外へ移動してしまいます。

DestroyArea外に出てしまったら削除されるようにします

レイヤーで当たり判定の制御

1: プレイヤーの弾とプレイヤーは当たらない 2: エネミーの弾とエネミーは当たらない 3: プレイヤーの弾とエネミーの弾は当たらない 4: プレイヤーの弾同士は当たらない 5: エネミーの弾同士は当たらない 6: エネミー同士は当たらない 7: プレイヤー同士は当たらない

これらの制限を行う上で最も簡単なのがレイヤーで当たり判定を制御することです。
レイヤーは一部の制限を設けるために使用することが多い機能です。

レイヤー は、 カメラ によりシーンの一部のみレンダリングするために、また ライト はシーンの一部のみ照らすため、というように頻繁に使用されます。一方で部分的に、Collider を無視するあるいは レイヤーベースの衝突検出を発生させるためにも使用することができます。

スクリプトでレイヤー制御

特定の場合だけ当たり判定を無視したいという状況があります。
このゲームではOnCollisionEnter2dはDestroyAreaは無視したいけれどEnemyとBullet(Enemy)は無視したくありません。

DestroyAreaに当たった時、OnTriggerExit2Dは呼び出したいけどOnTriggerEnter2Dは呼び出したくないのです。
レイヤー情報をgameObjectから取得することが可能です。

// レイヤー名を取得
string layerName = LayerMask.LayerToName(c.gameObject.layer);

スポンサードリンク




 PlayerBulletゲームオブジェクトの削除

のまま弾を撃ち続けるとPlayerBulletがゴミとして残り続けてしまうため削除しなければいけません
最も簡単なn秒後に削除という方法で対処します。

// lifeTime秒後に削除
Destroy (gameObject, lifeTime);
Categories: Unity
M1star.paper :