はじめに
こんにちは、かなたです。
Unityのゲーム開発中にシーン間をまたいだ変数を作成したいことがありました。
備忘録として解決方法を残しておきます。
使用想定
-
リザルトシーンで別シーンの変数を利用したい場合
-
音を再生したい場合
1. シーン遷移しても残るクラスの作成
今回は例としてゲームを管理するクラスを作成します。
DontDestroyOnLoad
が実装されている場合はシーンの遷移時にオブジェクトが破壊されず残ります。
GameManager.cs
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }
public ScoreModel scoreModel;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
クラスに定義した変数は以下のとおりです。
内部にtabletTotalとmissCountを持っています。
ScoreModel.cs
public class ScoreModel : MonoBehaviour
{
public int tabletTotal;
public int missCount;
public void Default(int tabletTotal = 0, int missCount = 0)
{
this.tabletTotal = tabletTotal;
this.missCount = missCount;
}
public void Miss()
{
++this.missCount;
}
public void Correct()
{
--this.tabletTotal;
}
}
2.最初のゲームシーンにクラスを設定する
HierarchyにGameManager
とScoreModel
を作成し、Inspectorにクラスを設定します。
3.シーン遷移で残るか確認
最初にDontDestroyOnLoad
シーンが作成され、シーン遷移後にDontDestroyOnLoad
が残ることを確認します。
Ex.変数を参照する
クラスはGameObject.Find()
で探せます。
今回はゲーム管理クラスの変数を読み込みました。
InGameController.cs
public class InGameController : MonoBehaviour
{
public ScoreModel scoreModel;
void Start()
{
this.scoreModel = GameObject.Find("GameManager").GetComponent<GameManager>().scoreModel;
scoreModel.Default(0, 0);
}
}
おわりに
シーン間をまたいだ変数の作成について紹介しました。
Unityのゲーム開発では頻出の内容で、Unityゲーム開発者はできて当たり前の技術とは思います。
何かこの記事で為になることがあれば嬉しいです。
それではさよなら。