【Unity】ダンジョン内で次の階層に移動した際に、各階層に応じてプレイヤーの向きを変更させる処理を行いたい時のコード。

ダンジョン内で次の階層に移動した際に、プレイヤーの向きが一定であるとおかしいため、各階層に応じてプレイヤーの向きを変更させる処理を行いたい時のコード。
(アニメーションやその他の前提条件を満たしているものとする。)

まず、DungeonManagerを作成。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class DungeonManager : MonoBehaviour
{
    //ダンジョン名を格納する変数
    public string dungeonName;
    //プレイヤーの初期向きを保持する変数
    public Vector3 playerInitialRotation;

    private void Start()
    {
        //プレイヤーの初期向きを設定
        PlayerController playerController = FindObjectOfType<PlayerController>();
        if (playerController != null)
        {
            playerController.SetInitialRotation(playerInitialRotation);
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            SceneManager.LoadScene(dungeonName);
        }
    }
}

このコードを記述した後に、PlayerController(向きを変えたいキャラの移動を管理するスクリプト)にもコードを記述する必要があるため、Playercontrollerにいってあげる。
そしてそこに以下の関数を記述する。

//(その他の制御コードは書かれている前提)

//プレイヤーの初期の向きを設定するためのメソッド
    public void SetInitialRotation(Vector3 rotation)
    {
        //プレイヤーの初期向きを設定
        transform.rotation = Quaternion.Euler(rotation);

        //アニメーションの初期向きを設定
        if (playerAnim != null)
        {
            //X軸、Y軸のアニメーションのパラメータを設定
            playerAnim.SetFloat("X", rotation.x);
            playerAnim.SetFloat("Y", rotation.y);
        }
    }

DungeonManagerは次の階層に進むための階段や穴などにアタッチする。
そしてインスペクターにて、次の階層のシーン名と今現在のシーンではどの向きにするかの設定をしてあげる。

そうすることで各階層に遷移したときに、インスペクターで設定した通りの方向を向くようになる。

コメント

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