簡単な縦型の2Dシューティング作成(スマホ)。Part2.機体(Player)の動作【Unityゲーム作成】

簡単な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にするのは一つの関数に。ボタンイベントは下記のように変更。右ボタンも同様に変更します。

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

タイトルとURLをコピーしました