投稿

ラベル(VContainer)が付いた投稿を表示しています

VContainerを触ってみた。その3,注入するInputの変更 (Unity初心者)

 前回まで その1 その2 今回 よくあるPlayerの移動のInputの取得方法を分けてPlayerが参照するInputをDIコンテナ側で注入する際に注入するInputクラスを選ぶことでPlayerの移動方法を変える。 ①InputHandlerインターフェイスを作成 public interface IInputHandler { Vector3 GetInputDirection(); } このインターフェイスを継承してGetInputDirectionでそれぞれの入力の違いを出していく。 ②IInputHandlerを継承したクラスを作成 //方向キーでの移動 public class InputFromArrow : IInputHandler { public Vector3 GetInputDirection() { if (Input.GetKey(KeyCode.UpArrow)) return Vector3.up; if (Input.GetKey(KeyCode.LeftArrow)) return Vector3.left; if (Input.GetKey(KeyCode.DownArrow)) return Vector3.down; if (Input.GetKey(KeyCode.RightArrow)) return Vector3.right; return Vector3.zero; } } //WASDでの移動 public class InputFromWASD : IInputHandler { public Vector3 GetInputDirection() { if (Input.GetKey(KeyCode.W)) return Vector3.up; if (Input.GetKey(KeyCode.A)) return Vec...

VContainerを触ってみた。その2,MVPパターン (Unity初心者)

イメージ
 前回まで 公式リファレンスのHello Worldをやりながら自分なりにまとめた。 <<前回 今回 前回のボタンを持ったViewにTextを追加して、ボタンを押すたびにViewのTextの数字を増やしていく仕様を作った。 MVPパターンでやってみる。 前回作ったクラスに追加していく形にする。 VContainerのテストなのでUniRxとかは使わずにやってみる。 ①HelloScreen(View)にTextを追加。 シーンにTextを追加して、HelloScreen(View)にTextコンポーネントの参照を追加。 またテキストを更新する処理を作った。 public class HelloScreen : MonoBehaviour { public Button HelloButton; public Text countText; //追加 public void UpdateText(int _count) //数字を引数にその数字にテキストを変更 { countText.text = _count.ToString(); } } ②CountUpModel(Model)を作成。 ボタンを押すたびにカウントを上げるので、今のカウントとそのカウントを上げる処理を実装したCountUpModel(Model)を作成した。 public class CountUpModel { int nowCount; //現在のカウント public int NowCount => nowCount; public CountUpModel() { nowCount = 0; } public void CountUp() //カウントを増やす { nowCount ++; } } ③GamePresenter(Presenter)に先ほど作ったCountUpModel(Model)のフィールドを作成。 Presenterに注入するModelのフィールドを作成。 IStartable...

VContainerを触ってみた。その1,HelloWorld (Unity初心者)

イメージ
 はじめに 最近ゲーム作りにおけるデザインパターンなるものを気にしながらゲームプログラムを書いている。その延長上でDependency Injection(DI)なるデザインパターンがあり、Unity上で動作するDIフレームワークのVContainerを使ってみる。 Dependency Injection(DI)とは 直訳すると依存性注入。 DIとは、プログラミングにおけるデザインパターン(設計思想)の一種で、オブジェクトを成立させるために必要となるコードを実行時に注入(Inject)してゆくという概念のことである。 参考: https://www.weblio.jp/content/Dependency+Injection   なぜVContainerなのか もう一つUnityのDIフレームワークで有名なZenjectというものがあり、最初そちらを触ってみたのだが、どうやら調べてみるとVContainerの方がパフォーマンスがいいらしい。 ぶっちゃけ初心者にパフォーマンスの違いとかわからんが、まぁいいと言われているものを使った方がいいだろうということで。 あと、日本語のリファレンスがあって、何か詰まったら調べやすい気がした。 VContainer日本語リファレンス 導入 新しいプロジェクトを作成するか、既存の導入したいプロジェクトを開く。 Packages/manifest.jsonファイルを開く "dependencies": { }内に以下のコードを追記(古くなっている可能性があるので、最新版を上のドキュメントURLからコピーした方がいいです) "jp.hadashikick.vcontainer":"https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer#1.15.3" これでインポートされるはず。 チュートリアル 公式リファレンスの Hello World をやっていく。 (以下はリファレンス通りにやっているだけなんで飛ばしてOK) 自分...