マルチシーン間のアクセスサンプル(その2)
ゲームを実行するMainSceneとUIをコントロールするUISceneを作ります
MainSceneからUISceneのオブジェクトへアクセスします
MainScene
GameController
ゲームスコア管理
スコアの計算と管理を担当します。ゲーム中にスコアを追加する機能を提供し、スコアの更新をログに出力します。
- Startメソッド: ゲーム開始時にプレイヤーのスコアを0にリセットします。
AddScore
メソッド: 与えられたスコアを現在のスコアに加算し、更新されたスコアをデバッグログに出力します。
using UnityEngine;
// スコア管理を担当するクラス
public class ScoreManager : MonoBehaviour
{
// ゲーム共有データへの公開参照
public GameSharedData sharedData;
// コンポーネントが初めてアクティブになったときに呼び出される
void Start()
{
// ゲーム開始時にプレイヤーのスコアを0にリセットする
sharedData.playerScore = 0; // ゲーム開始時のスコアをリセット
}
// スコアを追加するメソッド
public void AddScore(int scoreToAdd)
{
// 指定された点数を現在のスコアに加算
sharedData.playerScore += scoreToAdd;
// デバッグログに更新後のスコアを出力
Debug.Log("Updated Score: " + sharedData.playerScore);
}
}
UIScene
UIManager
リアルタイムスコア表示の実装
こちらもMonoBehaviour
を継承しており、UIにスコアを表示する役割を持っています。TextMeshProUGUIコンポーネントを使用してスコアを表示します。
- Updateメソッド: 毎フレーム、
sharedData
からスコアを取得し、UIのテキストを更新します。
using UnityEngine; // Unityエンジンの機能を利用するための名前空間
using TMPro; // TextMeshProを利用するための名前空間
// MonoBehaviourを継承したDisplayScoreクラスの定義
public class DisplayScore : MonoBehaviour
{
// GameSharedDataの参照を保持するパブリック変数
public GameSharedData sharedData;
// スコア表示用のTextMeshProUGUIコンポーネントの参照を保持するパブリック変数
public TextMeshProUGUI scoreText;
// Updateメソッドは毎フレーム呼び出される
void Update()
{
// scoreTextのテキストを、"Score: "にsharedDataから取得したplayerScoreを文字列に変換して追加
scoreText.text = "Score: " + sharedData.playerScore.ToString();
}
}
データの共有保存の仕組み(スクリプタブルオブジェクト)
このスクリプト自体は、どこにもアタッチしません
あくまでテンプレートとして機能します
このGameSharedData
クラスを利用することで、例えばゲーム内でプレイヤーのスコアを保持し、異なるシーンやゲームオブジェクトにわたって簡単にアクセスしやすくなります。例として、プレイヤーが新しいレベルに進むたびにスコアをリセットする代わりに、ゲーム全体を通じてスコアを蓄積することができます。また、このスコアを使ってリーダーボードを更新したり、達成条件をチェックすることができます。
このスクリプトはScriptableObject
を継承しており、プレイヤーのスコアを保持するためのデータコンテナとして機能します。Unityエディタのメニューから直接生成できるようにCreateAssetMenu
属性が付けられています。
- 目的: ゲーム全体で共有されるデータ(この場合はプレイヤーのスコア)を管理します。
- フィールド:
playerScore
はプレイヤーのスコアを整数型で保持します。
using UnityEngine;
// ScriptableObjectを継承し、Unityエディタのメニューから生成可能にする属性設定
[CreateAssetMenu(fileName = "GameSharedData", menuName = "ScriptableObjects/GameSharedData")]
public class GameSharedData : ScriptableObject
{
// プレイヤーのスコアを公開変数として保持
public int playerScore; // プレイヤーのスコアを表す整数型の公開フィールド
}
CreateAssetMenu
属性を使用して、Unityのエディター内でこのScriptableObject
を簡単に生成できるようにメニュー項目を追加します。fileName
は新しく作成されるアセットのデフォルトのファイル名を指定します。menuName
はエディタのメニュー内の表示場所を指定します。
共有データの作り方
次の手順でスクリプタブルオブジェクトのファイルを作成します
これを必要とするゲームオブジェクトにアタッチしてデータを共有することになります
Projectウィンドウで右クリックメニューを表示します
上記のスクリプトによって、メニューが追加されていますので、新しいファイルを作成します
ファイルができたら、データを必要とするアタッチされたスクリプトにアウトレット接続します
ディスカッション
コメント一覧
まだ、コメントがありません