「【Unity 入門】全方位シューティングを作る 全26回」というサイトをまねしてみる記事の第2回目記事です。前回はアセットの入手やオブジェクトの配置といったちまちまとした作業がつづきました。
Unity全方位2Dシューティングのチュートリアルをやってみる【第1回】
前回記事からの続きで3からはじめたいと思います。
3.プレイヤーを移動させるスクリプトの作成
ここでやること
- プレイヤー移動用のスクリプトの作成
- 作ったスクリプトをプレイヤーオブジェクトにアタッチ
WASDキーもしくは、矢印キーでキャラクターを動かせるようにスクリプトを作成します。
プレイヤー移動用スクリプトを作る
スクリプトはC#で作成していきます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerScript : MonoBehaviour { public float m_speed;//移動の速度 // Use this for initialization void Start () { } //毎フレーム呼び出される関数 private void Update () { var h = Input.GetAxis("Horizontal"); var v = Input.GetAxis("Vertical"); //矢印キーが押されている方向にプレイヤーを移動する var velocity = new Vector3(h, v) * m_speed; transform.localPosition += velocity; } }
ここでの学び
- Update()関数は毎フレーム呼び出される関数
- publicな変数を宣言するとUnityのUIで変数の値を変更できるようになる
- Input.GetAxis()はキー入力をうけつけるための関数
- Vector3は位置を扱うためのオブジェクトを生成する(認識まちがってるかも)
コードの詳しい意味まではわからないけど、このスクリプトをPlayerにアタッチすることで自機が動くようになる。忘れてはならないのがm_speed変数の値をUnityのUI側で変更することだ、初期値は0になっているので、この値を+にしてやらないとPlayerは動かない
ここまでの状態
自機を動かすスクリプトをPlayerにアタッチした状態です。なので矢印キーやwasdでPlayerを動かすことができます。
4.プレイヤーの移動範囲を制限する
移動範囲を制限していない状態なのでプレイヤーが画面外に消えてしまいます。そのため新たにUtilsScriptを作成します。
移動を制限するためのスクリプト(UtilsScript)
using UnityEngine; public static class UtilsScript{ //移動可能な範囲 public static Vector2 m_moveLimit = new Vector2(4.7f, 3.4f); //指定された位置を移動可能な範囲に収めた値を返す public static Vector3 ClampPosition(Vector3 position){ //Mathf.Clamp()与えられた最小 float 値と最大 float 値の範囲に値を制限します。 //public static int Clamp (int value, int min, int max); return new Vector3( Mathf.Clamp(position.x, -m_moveLimit.x, m_moveLimit.x), Mathf.Clamp(position.y, -m_moveLimit.y, m_moveLimit.y), 0 ); } }
ClampPosition()は新たに定義した関数でする。ここで重要なのはMathf.Clamp()関数でこれは、与えられた最初と最大の引数に値を制限します。第2引数と第3引数が最初と最大の値になっています。またstaticキーワードが書かれていることから、このコードは静的メンバーとして定義されています。
なにも知らない人がみると一気に難しくなってしまいますが、staticキーワードにかんしては気にしなくてもよいと思います。
自機スクリプトへのコード追加
UtilsScriptの静的メンバーを使うためにPlayerScriptのUpdate関数にコードを追加します。
void Update () { var h = Input.GetAxis("Horizontal"); var v = Input.GetAxis("Vertical"); //矢印キーが押されている方向にプレイヤーを移動する var velocity = new Vector3(h, v) * m_speed; transform.localPosition += velocity; // プレイヤーが画面外に出ないように位置を制限する transform.localPosition = UtilsScript.ClampPosition( transform.localPosition ); }
ここでの学び
- Vector2Dは位置オブジェクトを生成する
- Mathf.Clamp()を使うと値を制限することができる
- 静的メンバーを定義して他のスクリプトで使いまわしできるようにする
ここまでの状態
移動範囲を制限するスクリプトを定義して、定義したメソッドをPlayerScriptのUpdate関数で使っているので移動範囲が制限された状態になっています。(画面外にいかなくなった)
ちょっと地味でわかりにくいですが、ちゃんと動作しています。
次の記事
移動制限から一気に難しくなりました。ここから先は記事がながくなるので次の記事にします。
Unity全方位2Dシューティングチュートリアル3回目。自機へ機能追加
コメント