今回は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に変更して実行すると下記の様な感じに。開始時に上を向いているので上方向に力を加えていますが、向きを変えれば横向きにすることもできます。
