[Unity 2D]ミサイルを発射してみる(1)

はじめに

前回は、キャラクターをキーボードで操作する方法について説明しました。今回と次回で、自機からミサイルを発射する方法について説明します。

過去記事は以下の通りです。

ミサイルのスプライトを追加する

はじめに、ミサイル用の画像を準備して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にしてみてください。

[Unity 2D]キャラクターのキーボードによる移動

はじめに

前回は、キャラクターを追加してRigidbody 2Dを設定する方法について説明しました。

今回は、キャラクターをキーボードで操作する方法について説明します。

過去記事は以下の通りです。

キャラクター制御用スクリプトの作成

スクリプトを作成してキャラクターを移動させます。

はじめに、Projectビューで、Assetsフォルダの下にスクリプト保存用のScriptsフォルダを作成します。

続いて、作成したScriptsフォルダを右クリックして、「C# Scripts」を選択して、「Heli」という名前のスクリプトファイルを作成します。このとき付ける名前は任意のもので構いません。ヘリコプターを移動させたいのでHeliという名前にしています。

作成したスクリプトをダブルクリックして開くと、以下の様なコードが作成されていることがわかります。このとき関連付いているエディタが立ち上がり、コードが表示されます。おすすめのエディタはVisual Studioです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Heli : MonoBehaviour {

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

StartメソッドとUpdateメソッド

Startメソッドは、初期化処理を行うためのメソッドで自動的に呼ばれます。このメソッドは、スクリプトのインスタンスが有効になり、最初のフレームのアップデート前に呼ばれます。

Updateメソッドは、毎フレーム呼ばれるメソッドです。敵キャラクターを動かしたりキーボード入力を取得したりする場合は、このメソッド内で行います。

キャラクターを移動させるスクリプトの作成

それではスクリプトを作成しましょう。スクリプトとキャラクターの関連付けは後から行います。

はじめに、Heli.csのUpdateメソッドを以下のように編集します。

public float speed = 100.0F;    // 移動早さ

// Use this for initialization
void Start () {
	
}

// Update is called once per frame
void Update () {
    Debug.Log("Inputed");
    // 矢印キーの入力情報を取得
    var h = Input.GetAxis("Horizontal");
    var v = Input.GetAxis("Vertical");

    // 移動する向きを作成する
    Vector2 direction = new Vector2(h, v).normalized;

    // 移動する向きとスピードを代入 
    GetComponent<Rigidbody2D>().velocity = direction * speed;
}

Updateメソッド内のInput.GetAxisメソッドは、指定された文字列に対する仮想軸の値を返すメソッドです。
キーボードの矢印キーの値を取得したい場合は、GetAxisの引数に「Horizontal」や「Vertical」といった文字列を指定します。

Horizontalは水平方向を表し、右側が+です。Verticalは垂直方向を表し、上方向が+です。

GetAxisで取得した値を使用して移動させます。

移動方向はVector2構造体を使用します。Vector2構造体は、位置や方向を決める為に使用され、一般的なベクトル演算を行うメソッドが備わっています。

Vector2は以下の書式で使用します。

Vector3(float x, float y)

最後の行は、位置を設定させるためのプロパティです。Vector2とspeedを使用して移動をさせます。

以上でスクリプトの作成は完了です。

スクリプトのアタッチ

ひとまずスクリプトの作成が完了したのですが、この時点ではどのキャラクターとも結びついていません。

作成したスクリプトをキャラクターに結びつけることをアタッチするといいます。

アタッチするには、ProjectビューからHierarchyビューにある任意のキャラクターに、スクリプトをドラッグ&ドロップします。

 

キャラクターを選択した状態でInspectorビューを確認すると、Playerという項目が追加され、Speedという値の設定が可能になっていることがわかります。これは、先ほどスクリプトに記述したpublic変数です。

Speedが100だと速すぎるので、1〜10くらいの範囲で設定してみてください。

このようにpublic変数はUnityエディタ上で編集できるようになります。

動作確認

あとは再生ボタンを押して動作を確認しましょう。

以下のようにヘリコプターを操縦することができます。

[Unity 2D]キャラクターの追加とRigidbody 2Dの追加

はじめに

前回は、カメラの設定について説明し、背景画像の見え方(サイズ調整)を行いました。

今回は、キャラクターを追加してRigidbody 2Dを追加する方法について説明します。

過去記事は以下の通りです。

キャラクターを追加する

はじめに、ProjectビューのAssetsフォルダにキャラクターとなる画像を追加します。

例としてヘリコプターの画像を準備し、Assets\Spritesフォルダに配置します。

本素材は、「かわいいフリー素材 いらすと屋」さんからダウンロードした画像です。

次に、追加したキャラクターをSceneビューにドラッグ&ドロップして任意のサイズに変更します。

今度は、キャラクターを画面中央に設定するしてみましょう。

配置したキャラクターを選択して、InspectorビューでPositionのx,y,zを0に設定します。

Rigidbody 2Dの設定

Rigidbody 2Dとは2Dのゲームオブジェクトに対して物理シミュレーションをするコンポーネントです。

配置したキャラクターを選択したら、Inspectorビューの下の方にある[Add Component]というボタンをクリックして、[Physics 2D]-[Rigidbody 2D]を選択します。

Rigidbody 2Dを追加すると、Inspectorビューは以下のようになります。

上記の設定が完了したら、画面上部にある再生ボタンをクリックします。

すると、キャラクターが落下していくのがわかります。このように、Rigidbody 2Dを設定すると、物理法則が働くようになります。

落下をさせたくない場合は、InspectorビューでGravity Scaleに0を設定します。