簡単な2Dシューティングゲーム作成の第2回目を進めていきます。今回は実際に操作する機体(プレイヤー)の動作設定をしていきます。
はじめに
Part1は下記です。
簡単なおさらいと今回やること
前回、「機体」と「ボタン」を設置して簡単な画面を作成しました。いわゆるUIってやつですね。今回は「機体(プレイヤー)」を動かせるようにします。
ゲーム作成開始
では、さっそく機体を動かしていきます。
機体(プレイヤー)を動かす
まずはScriptsフォルダ内で右クリック。作成から「C#スクリプト」を選択。ファイル名はPlayerMoveにします。

パソコンゲームでキャラクターを動かす場合
パソコンゲームの場合、キーボードの矢印キーでプレイヤーを動かすのが一般的です。例えば、下記のようにスクリプトを変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class PlayerMove : MonoBehaviour { void Update() { float x = Input.GetAxis("Horizontal"); transform.position += new Vector3(x, 0, 0) * 4.0f * Time.deltaTime; } }
このスクリプトをPlayerオブジェクトにくっつけます。

試しに、再生して動かしてみると、キーボードの「←」、「→」を押すことで機体が動きます。
ボタン操作でプレイヤーを動かす
スマートフォンの場合は矢印キーがないので、ボタンを押したら機体が動くようにします。まずはLeftボタンにイベントトリガーを追加。「新しいイベントタイプを追加」から「Pointer Down」と「Pointer UP」を追加。

PointerDownはボタンを押した時に発動。PointerUPはボタンを離した時に発動します。スクリプトを下記のようにします。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public float fSpeed; bool bLPush = false; void Update() { if(bLPush) { transform.position += new Vector3(fSpeed, 0, 0) * Time.deltaTime; } } public void LPointerDown() { bLPush = true; } public void LPointerUP() { bLPush = false; } }
ボタンを押した時に、フラグをtureに。trueの間は機体を移動するようにします。パソコンと違うのは「キーを押した時」か「ボタンを押した時」かと言う点です。
追加したイベントに、それぞれ対応する関数を割り当てます。

速さを変数にしたので、変数に値を入れます。とりあえず4くらいにしておきます。

これで一度再生してみます。左ボタンを押すと機体が右に動きますね。反対(マイナス方向の速度)に変更して、右ボタンも設定していきます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public float fSpeed; bool bLPush = false; bool bRPush = false; void Update() { if(bLPush) { transform.position += new Vector3(-fSpeed, 0, 0) * Time.deltaTime; } else if(bRPush) { transform.position += new Vector3(fSpeed, 0, 0) * Time.deltaTime; } } public void LPointerDown() { bLPush = true; } public void LPointerUP() { bLPush = false; } public void RPointerDown() { bRPush = true; } public void LRointerUP() { bRPush = false; } }
右ボタンにも左ボタンと同じように「イベントを追加」して、イベント関数に割り当て。実行してみて、ボタンを押して左右に機体が動けばOK。
次に、画面から機体がはみ出ないように制御して、関数を少しまとめます。下記のような感じです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public float fSpeed; bool bLPush = false; bool bRPush = false; void Update() { if (bLPush && transform.position.x >= -2.3f) { Move(-fSpeed); } else if (bRPush && transform.position.x <= 2.3f) { Move(fSpeed); } } private void Move(float x) { transform.position += new Vector3(x * Time.deltaTime, 0, 0); } public void LeftButton(bool isDown) { bLPush = isDown; } public void RightButton(bool isDown) { bRPush = isDown; } }
ボタンを押したらture、離したらfalseにするのは一つの関数に。ボタンイベントは下記のように変更。右ボタンも同様に変更します。

プログラムの書き方は色々ありますが、とりあえず、今回で機体が動くようになりました。次回は機体(プレイヤー)から弾が出るようにします。