ダンジョン内で次の階層に移動した際に、プレイヤーの向きが一定であるとおかしいため、各階層に応じてプレイヤーの向きを変更させる処理を行いたい時のコード。
(アニメーションやその他の前提条件を満たしているものとする。)
まず、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は次の階層に進むための階段や穴などにアタッチする。
そしてインスペクターにて、次の階層のシーン名と今現在のシーンではどの向きにするかの設定をしてあげる。
そうすることで各階層に遷移したときに、インスペクターで設定した通りの方向を向くようになる。
コメント