MonoBehaviourを継承しないスクリプトを用いてスコア加算する方法(Unity)
今回は上記の動画のようにMonoBedaviourを継承しないクラスを用いてスコアを加算するシステムを実装しました。
各スクリプトの役割は、以下の通りです。
コーディング
各スクリプトの役割は、以下の通りです。
GameController : GameControllerクラスは、ゲームの全体的な流れや状態を制御・操作します。また、GameSessionのインスタンスを保持し、そのインスタンスのメソッドを呼び出してゲームの状態を更新します。
GameSession : GameSessionクラスは、ゲームセッション全体を管理します。具体的には、データ(今回はスコア)を管理し、そのデータへのアクセスを制御します。PlayerDataのインスタンスを保持し、そのインスタンスのプロパティを更新するメソッド(UpdateScoreなど)と、プロパティの値を取得するメソッド(GetScoreなど)を提供します。
PlayerData : PlayerDataクラスは、データを保持し、そのデータへのアクセスを制御します。
using UnityEngine;
using TMPro;
public class GameController : MonoBehaviour
{
private GameSession gameSession;
[SerializeField] private TextMeshProUGUI scoreText;
void Start()
{
gameSession = new GameSession();
}
private void FixedUpdate()
{
// スコアを更新
gameSession.UpdateScore(1);
// スコアを取得してログに出力
int score = gameSession.GetScore();
scoreText.text = score.ToString();
}
}
public class GameSession
{
private PlayerData playerData;
public GameSession()
{
playerData = new PlayerData();
}
public void UpdateScore(int newScore)
{
playerData.Score += newScore;
}
public int GetScore()
{
return playerData.Score;
}
}
public class PlayerData
{
private int score;
public int Score
{
get { return score; }
set { score = value; }
}
}
PlayerDataメモ
プライベートフィールドと公開プロパティを組み合わせて使用することには、以下のようなメリットがあります。
カプセル化 : プライベートフィールドと公開プロパティを使用することで、クラスの内部状態を外部から直接操作することを防ぎ、クラスの内部状態を適切に制御することができます。それにより、想定しないアクセスが原因で、クラスの状態が不適切な値になることを防ぐことができます。
データの検証 : 公開プロパティのsetアクセサでは、設定される値を検証することができます。これにより、不適切な値が設定されることを防ぐことができます。
データの変更の追跡 : 公開プロパティのsetアクセサでは、値が変更されたときに特定のコードを実行することができます。これにより、値の変更を追跡し、それに応じて特定のアクションを実行することができます。
抽象化 : プロパティを使用することで、クラスの使用者はクラスの内部実装の詳細を知らずに、クラスの機能を利用することができます。これにより、クラスの内部実装を変更しても、クラスの使用者に影響を与えることなく、コードのメンテナンスが容易になります。
以上のように、プライベートフィールドと公開プロパティを組み合わせて使用することにより、データの安全性、検証、追跡、抽象化といったメリットを享受することができます。
この記事が気に入ったらサポートをしてみませんか?