unityの新しい入力システムパッケージのInput Systemを使って、プレイヤーを動かす方法です。
完成動作
上下左右キーでプレイヤー(Sphere)が移動する。
作り方
1.シーンに各オブジェクトを配置
1-1.以下のようにPlaneを床にして、Sphere(赤い球)をプレイヤーとして配置する。
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-39.png)
2.プレイヤーにRigidbodyを追加
2-1.プレイヤー(Sphere)にRigidbodyを追加する。(プレイヤーを動かす処理はRigidbodyのAddForceを使用して行うため)
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-40.png)
3.Input Systemパッケージのインストール
3-1.Package Managerを開く
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-41.png)
3-2.右上の検索窓で”Input System”で検索
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-42.png)
3-3.上記画像の右下のInstallを押下してインストール
※インストール後に以下のようなメッセージが表示された場合、旧型式のInput Managerを無効化して新しいInput Systemを有効かするかどうかという意味なので、今回は旧式を使用しないので、Yesを押下。
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-43.png)
3-4.Saveするとunityが再起動されるので待つ。
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-44.png)
3-5.Input Systemのインストールが完了
4.プレイヤーにPlayer Inputコンポーネントを追加して設定
4-1.プレイヤー(Sphere)にPlayer Inputコンポーネントを追加
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-45.png)
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-46.png)
4-2.Player InputコンポーネントCreate Actionsを押下
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-47.png)
4-3.任意の場所にInputActionsという名前で保存(今回はAssetsフォルダにInputというフォルダを作成してそこに保存)
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-48.png)
4-4.以下のような画面が表示される場合があるが、こちらはいったん閉じる。
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-49.png)
4-5.以下のように自動的にActionsプロパティに先ほど作成したInputActionsがアタッチされているはず。(されていなかったら自分でアタッチ)
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-50.png)
5.Input Systemでプレイヤーを動かすスクリプトを作成
5-1.PlayerController.csという名前のスクリプトを作成して、以下のコードを記載する。
using UnityEngine;
using UnityEngine.InputSystem;
[RequireComponent(typeof(Rigidbody))]
public class PlayerController : MonoBehaviour
{
[SerializeField]
[Tooltip("プレイヤーの速度調整")]
private float speed = 0;
private Rigidbody rb;
private float movementX;
private float movementY;
// Start is called before the first frame update
void Start()
{
// プレイヤーにアタッチされているRigidbodyを取得
rb = gameObject.GetComponent<Rigidbody>();
}
/// <summary>
/// 移動操作(上下左右キーなど)を取得
/// </summary>
/// <param name="movementValue"></param>
private void OnMove(InputValue movementValue)
{
// Moveアクションの入力値を取得
Vector2 movementVector = movementValue.Get<Vector2>();
// x,y軸方向の入力値を変数に代入
movementX = movementVector.x;
movementY = movementVector.y;
}
private void FixedUpdate()
{
// 入力値を元に3軸ベクトルを作成
Vector3 movement = new Vector3(movementX, 0.0f, movementY);
// rigidbodyのAddForceを使用してプレイヤーを動かす。
rb.AddForce(movement * speed);
}
}
※補足
Moveアクションというのは4-2で作成したInputActionsの中のActionsの中の”Move”の操作のこと。
詳しくはInput Systemについてネットで調べてください。
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-51.png)
6.プレイヤーにPlayerControllerスクリプトをアタッチ
6-1.プレイヤーにPlayerControllスクリプトをアタッチ
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-52.png)
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-53.png)
6-2.”Speed”プロパティを任意の値に設定し、プレイヤーの移動速度を調整(今回は10)
![](https://programming.sincoston.com/wp-content/uploads/2022/04/image-54.png)
完成
これで上下左右キーを押すとプレイヤーが移動する。
コメント