【Unity】依存性の注入(インスタンスを取得する)
Unityでインスタンスを取得する方法は、取得したいインスタンスの種類によって異なります。いくつかの一般的な方法を紹介します:
いろいろな方法
GameObject.Find
やGameObject.FindWithTag
を使用する:シーン内にオブジェクトが存在する場合、GameObject.Find
をオブジェクトの名前と共に使用するか、GameObject.FindWithTag
をタグと共に使用してインスタンスを取得できます。GetComponent
を使用する:特定のコンポーネントのインスタンスを取得するには、対象のGameObjectにアタッチされているGetComponent
メソッドを使用します。例えば、GameObjectにアタッチされているRigidbodyコンポーネントを取得したい場合、GetComponent<Rigidbody>()
と記述します。- シングルトンパターンを使用する:特定のクラスのインスタンスをアプリケーション全体で1つだけに限定したい場合、シングルトンパターンを使用してそのインスタンスにアクセスできます。シングルトンクラス内で静的なインスタンスを作成し、外部からアクセスできるように公開するメソッドを用意します。
Instantiate
メソッドを使用する:プレハブや他のGameObjectから新しいインスタンスを動的に生成したい場合、Instantiate
メソッドを使用します。このメソッドは、新しいGameObjectのインスタンスを作成し、それをシーンに追加します。- 依存性注入を使用する:大規模なプロジェクトや複雑な依存関係がある場合、依存性注入フレームワークを使用してインスタンスを取得することができます。これは、コンポーネント間の疎結合を促進し、テストや保守を容易にする設計パターンです。
インスタンスの取得方法は、その使用目的やシーンの構成によって異なりますので、目的に応じた適切な方法を選択してください。
5の依存性注入のサンプル
依存性注入(Dependency Injection、DI)は、コンポーネントやクラス間の依存関係を管理し、外部からその依存関係を注入するデザインパターンです。Unityゲーム開発において、DIを使用すると、コードの再利用性、テストのしやすさ、クラス間の疎結合が向上します
Vcontainerのインストール
パッケージマネージャからインストールする方法を使って見ましょう
そのほかの方法については別途を参考にしてください
Git URLを入力します
https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer#1.15.1
サンプル
UnityプロジェクトでVContainerを使用する簡単なサンプルをご紹介します。このサンプルでは、スコア管理のサービス(IScoreService
)とそれを使用するゲームコントローラー(GameController
)を作成し、VContainerを使って依存性を注入します。
ステップ1: インターフェースとサービスの定義
まず、スコアサービスのインターフェースIScoreService
と、その実装ScoreService
を定義します。
public interface IScoreService
{
int Score { get; set; }
void AddScore(int score);
}
using UnityEngine;
public class ScoreService : IScoreService
{
public int Score { get; set; }
public void AddScore(int score)
{
Score += score;
Debug.Log($"Current Score: {Score}");
}
}
ステップ2: ゲームコントローラーの作成
次に、スコアサービスを使用するGameController
コンポーネントを作成します。
using UnityEngine;
using VContainer;
public class GameController : MonoBehaviour
{
private IScoreService _scoreService;
[Inject]
public void Construct(IScoreService scoreService)
{
_scoreService = scoreService;
}
void Start()
{
_scoreService.AddScore(10);
}
}
ステップ3: VContainerでの依存性のバインディング設定
VContainerを使用して、依存性を解決し、注入します。これを行うには、LifetimeScope
を継承したクラスを作成し、依存性のバインディングを設定します。
using VContainer;
using VContainer.Unity;
public class GameInstaller : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
builder.Register<IScoreService, ScoreService>(Lifetime.Singleton);
builder.RegisterComponentInHierarchy<GameController>();
}
}
ステップ4: LifetimeScopeの設定
Unityエディター内で、新しい空のGameObjectを作成し、それにGameInstaller
スクリプトをアタッチします。これにより、GameInstaller
がシーンのLifetimeScope
として機能し、アプリケーションの起動時に依存性のバインディングが行われます。
実行
これでセットアップは完了です。Unityエディターでシーンを再生すると、GameController
が自動的にIScoreService
の実装であるScoreService
のインスタンスを注入され、スタート時にスコアを加算します。このプロセスは、VContainerが自動的に依存関係を解決し、必要なサービスをコンポーネントに提供するため、コードの柔軟性と再利用性が向上します。
ディスカッション
コメント一覧
まだ、コメントがありません