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

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

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

PointerDownはボタンを押した時に発動。PointerUPはボタンを離した時に発動します。スクリプトを下記のようにします。
using UnityEngine; public class Player : MonoBehaviour { private float speed = 4.0f; private bool LPush = false; private void FixedUpdate() { if (LPush) transform.position -= new Vector3(speed, 0, 0) * Time.fixedDeltaTime; } public void LeftPush(bool isPush) { LPush = isPush; } }
ボタンを押した時に、フラグをtureに。trueの間は機体を移動するようにします。パソコンと違うのは「キーを押した時」か「ボタンを押した時」かと言う点です。
追加したイベントに、下記のようにフラグを設定します。

これで一度再生してみます。下記のようにLEFTボタンを押して左に移動すればOKです。

同じように、右ボタンも設定し画面から機体がはみ出ないように最大位置をセットします。下記のような感じです。
using UnityEngine; public class Player : MonoBehaviour { private float speed = 4.0f; private float MaxPos = 2.3f; private bool LPush = false; private bool RPush = false; private void FixedUpdate() { if (LPush && transform.position.x >= -MaxPos) { transform.position -= new Vector3(speed, 0, 0) * Time.fixedDeltaTime; } else if (RPush && transform.position.x <= MaxPos) { transform.position += new Vector3(speed, 0, 0) * Time.fixedDeltaTime; } } public void LeftPush(bool isPush) { LPush = isPush; } public void RightPush(bool isPush) { RPush = isPush; } }
「RightButton」にも左ボタンと同じように「イベントを追加」して、イベント関数に割り当てます。
また、PlayerのPositionを変更して、プレイヤーの位置を下にずらします。

実行してみて、ボタンを押して左右に機体が動けばOK。

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