15
11

More than 5 years have passed since last update.

ボタン長押しでプレイヤー移動

Last updated at Posted at 2018-06-04

プレイヤー移動に使えるTipsです。キーボードではなく、画面上のボタンを長押しする場合について書いていきたいと思います。

準備

動かしたいプレイヤーと移動ボタンを作ります。
プレイヤーは
Hierarchy > Create > 3D Object or 2D Object
名前は「player」としておきます

ボタンは
Hierarchy > Create > UI > Button
今回は左右に動かしたいのでボタンは2つ作り、それぞれ「right」「left」とします。
下のようになればokです
スクリーンショット 2018-06-04 9.05.56.png
配置はこんな感じにしました
スクリーンショット 2018-06-04 9.34.25.png

長押し機能を作る

ボタンに長押し機能を付けます。
ボタンのInspector > Add Component > Event Trigger > Add New Event Type > Pointer Down と Pointer Up を選択
あとでスクリプトと関連づけていきます。方法としてはOn Click とあまり変わりありません。

コードを書く

Project > Create > C# Script
名前は「move」にしてみました
中身は以下の通り


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//UIを使うときのおまじない、忘れずに書く

public class move : MonoBehaviour {

    GameObject player;
//  動かしたいプレイヤー
    bool right = false;
//  右ボタンを押しているかの真偽値
    bool left = false;
//  左ボタンを押しているかの真偽値


    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (right) {
            goright ();
//          右に動かすためのメソッドを呼び出す
        }else if (left) {
            goleft ();
//          左に動かすためのメソッドを呼び出す
        } else {
//          ボタンを押していない時
            transform.rotation = Quaternion.Euler (0, 0, 0);
//          プレイヤーを元の角度に戻す
        }
    }

    public void rPushDown(){
//      右ボタンを押している間
        right = true;
    }

    public void rPushUp(){
//      右ボタンを押すのをやめた時
        right = false;
    }

    public void lPushDown(){
//      左ボタンを押している間
        left = true;
    }

    public void lPushUp(){
//      左ボタンを押すのをやめた時
        left = false;
    }

    public void goright(){
        if (transform.position.x <= 5.0f) {
//          プレイヤーの位置が5.0f以下の時
//          ↑画面からはみ出さないための条件
            transform.position += new Vector3 (5.0f * Time.deltaTime, 0, 0);
//          プレイヤーをx軸方向に秒速5.0fで動かす
            transform.rotation = Quaternion.Euler (0, -20, -10);
//          プレイヤーの角度をy軸周りに-20度、z軸周りに-10度回転させる
//          ↑プレイヤーがグッと肩を入れて移動してる感を出す、この一文は無くても問題なし


        }
    }

    public void goleft(){
        if (transform.position.x >= -5.0f) {
//          プレイヤーの位置が-5.0f以上の時
//          ↑画面からはみ出さないための条件
            transform.position += new Vector3 (-5.0f * Time.deltaTime, 0, 0);
//          プレイヤーをx軸方向に秒速-5.0fで動かす
            transform.rotation = Quaternion.Euler (0, 20, 10);
//          プレイヤーの角度をy軸周りに20度、z軸周りに10度回転させる
//          ↑プレイヤーがグッと肩を入れて移動してる感を出す、この一文は無くても問題なし
        }
    }


}   

ボタンとスクリプトの関連付け

ボタンのInspector > Event Trigger で関連付けします
右ボタンが
スクリーンショット 2018-06-04 9.52.01.png
左ボタンが
スクリーンショット 2018-06-04 9.52.44.png
となれば完了です。

実行

move.mov.gif
完成です!

OnClickじゃだめなの?

OnClickの場合、クリックしたその瞬間にしかメソッドが実行されません。
つまり、OnClickは「ボタンを押して、離した時」にイベントを発生させているのです。この点Event Trigger の Pointer Down は「ボタンを押した時」、Pointer Up は「ボタンを離した時」のそれぞれを司っています。よって長押しなど、イベントの発生タイミングを細かく設定したいときはEvent Triggerコンポーネントを使った方がいいでしょう。

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11