はじめに
前回は、キャラクターをキーボードで操作する方法について説明しました。今回と次回で、自機からミサイルを発射する方法について説明します。
過去記事は以下の通りです。
- [Unity 2D] Unityのインストールと2Dプロジェクトの作成
- [Unity 2D] Unityエディタの理解
- [Unity 2D] スプライトを登録する
- [Unity 2D] カメラの設定
- [Unity 2D]キャラクターの追加とRigidbody 2Dの追加
- [Unity 2D]キャラクターのキーボードによる移動
ミサイルのスプライトを追加する
はじめに、ミサイル用の画像を準備してSpritesフォルダに追加します。
続いて、Sceneビューにミサイルを配置します。
GameObjectを作成する
GameObjectは、コンテナ(入れ物)であってそれ自体は何もしません。GameObjectは作成したいゲームに合わせて、様々なコンポーネントの設定をして使用します。例えば、移動を表すtransformは、コンポーネントの1つにあたります。コンポーネントは非常に多くの種類があるので、使用していくうちに理解できてきます。
では、GameObjectを作成しましょう。メニューの[GameObject]-[Create Empty]を選択します。
これで、空のGameObjectが作成されます。作成したGameObjectにはtransformコンポーネントが備わっています。
作成したGameObjectを以下の様にPlayerMissileと名称変更します。
Rigidbodyの追加
前回の記事を参考に、PlayerMissileにRigidbodyを追加してください。追加したRigidbodyの各値は変更せず、デフォルト値のままとします。
作成したGameObjectにミサイルを関連付ける
さて、GameObjectを作成しましたが、どのキャラクターも関連付いていません。ここで、ミサイルと関連付けをします。
Hierarchyビューで、missileを作成したGameObejctであるPlayerMissileにドラッグ&ドロップします。すると以下の様に親子関係ができます。
Unityにおいて親子関係を作成すると、親に追従して子が動くようになります。例えば、親を回転させれば子も回転しますし、親を移動させれば子も移動するようになります。
複数のミサイルを同時に飛ばしたいような場合は、このような親子関係を作成するのが一般的です。
プレハブの作成
プレハブとは、Unityにおけるテンプレートのことです。単純に、スプライトなどをコピーして使用すると、それらのオブジェクトは独立したものになってしまうため、プレハブ化して使用をします。
はじめにプレハブを保存するためのPrefabsフォルダを作成します。
次に、HierarchyからProjectビューのPrefabsフォルダーに、PlayerMissileをドラッグ&ドロップします。これでプレハブが作成されます。プレハブ化されたオブジェクトは、Projectビューでは青字になります。
ミサイルを移動するスクリプトの作成
ミサイルを移動するスクリプトを作成します。ScriptsフォルダにFire.csというスクリプトファイルを作成して、以下のように編集をします。
一度だけミサイルを飛ばしてみるのでStartメソッド内に記述することとします。
GetComponent<Rigidbody2D>().velocityでミサイルの移動をします。また代入時のVector2.left.normalizedは画面左方向を表しています。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Fire : MonoBehaviour { public int speed = 5; // Use this for initialization void Start () { GetComponent<Rigidbody2D>().velocity = Vector2.left.normalized * speed; } // Update is called once per frame void Update () { } }
作成したスクリプトのアタッチ
スクリプトが作成できたので、PlayerMissileにスクリプトをアタッチしてください。前回記事同様、スクリプトファイルをPlayerMissileにドラッグ&ドロップしてアタッチします。
アタッチしたらPlayerMissileのApplyボタンを押して更新をしておきましょう。
実行してみる
実行すると、以下のように左方向にミサイルが発射されます。
もし、ミサイルが発射されないような場合は、スクリプトファイルがアタッチされているかどうか、PlayerMissileにRigidbody 2Dが追加されているかどうかを確認してください。
放物線を描いてミサイルが発射されました。真横に飛ばしたい婆は、Rigidbody 2Dの設定でGravityを0にしてみてください。
コメント