ボタン長押しでキャラクターを動かす【Unityメモ】

今回はUnity2Dで「ボタンを押している時、キャラクターが動く」ように実装してみます。

はじめに

Unityのバージョンは2021.3.14f1です。

下記にて、マウスカーソルを追いかけるようにキャラクターが動くのを実装しました。

今回は「ボタンを押している時にキャラクターが動く」のを実装してみます。

実装開始

Hierarchyで右クリックして、「2DObject」→「Sprites」→「Square」を追加

スケールを変更、Rigidbody2DをアタッチしてGravityScaleを0に。配下に同じくSquareオブジェクトを追加。

下記の様な感じになるように位置やスケールを変更します。

ここまではマウスカーソルを追いかける時のと同じような感じですね。

ボタンの実装

Hierarchyで右クリックして、「UI」→「Legacy」→「Button」を選択。

下記の様に名前とテキスト、位置を変更。このボタンを押している時にキャラクターが動くようにします。

下記スクリプトを作成。

using UnityEngine;

public class Chase : MonoBehaviour
{
    private float speed = 20.0f;
    private float rotationSpeed = 50.0f;
    private Rigidbody2D rb;
    private bool isLeft, isRight;

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        isLeft = false;
        isRight = false;
    }

    private void Update()
    {
        if (isLeft)
            transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);
        else if (isRight)
            transform.Rotate(Vector3.forward * -rotationSpeed * Time.deltaTime);
    }

    private void FixedUpdate()
    {
        rb.AddRelativeForce(Vector3.up * speed * Time.fixedDeltaTime);
    }

    public void LeftButtonDown()
    {
        isLeft = true;
    }
    public void LeftButtonUp()
    {
        isLeft = false;
    }
    public void RightButtonDown()
    {
        isRight = true;
    }
    public void RightButtonUp()
    {
        isRight = false;
    }
}

FixedUpdate内でオブジェクトの向いてる方向に力を加え、Update内でボタンフラグがTrueの時のみ、方向転換(回転)をしています。

ボタン処理の追加

各ボタンにEventTriggerを追加。

「Add New Event Type」から「PointerDown」と「PointerUp」を追加。

PointerDownにはButtonDownを割り当て。

LeftButton、RightButton共に下記の様に設定します。

下記の様にしてtrue,falseを渡しても良いかも。

    public void LeftButton(bool IsLeft)
    {
        isLeft = IsLeft;
    }

実行すると、下記の様な感じに。

摩擦が結構かかっているので、RigidBody2DのLinearDragとAnglurDragを2に変更して実行すると下記の様な感じに。開始時に上を向いているので上方向に力を加えていますが、向きを変えれば横向きにすることもできます。

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