タグ

ブックマーク / zenn.dev/qemel (12)

  • Riderでnamespaceのフォルダ粒度を変える

    はじめに Riderを使っていると自動でフォルダ構成に合わせたnamespaceにしてくれますが、ちょっと粒度が細かすぎて面倒に感じることもあります。 そんなときに、一部のフォルダをnamespaceの名前から無視することが出来るので、その方法を紹介します。 やり方 namespaceから無視したいフォルダを右クリックして、Propertiesを選択します。 すると、Propertiesウィンドウが開くので、Namespace Providerのチェックを外します。 これで、そのフォルダ以下のファイルはnamespaceの名前から無視されるようになります。 // フォルダ構成例 // Assets // - Scripts // - Game // - Presentation // - Player.cs // Player.cs // Presentationが無視されるため、推奨され

    Riderでnamespaceのフォルダ粒度を変える
  • UnityのDI超ざっくり入門 4 - DIコンテナを利用したPureC#主体の開発のメリット・デメリット

    はじめに 前回の記事では、UnityのDIコンテナとして有名なVContainerの基的な使い方を紹介しました。 その際、PureC#でエントリポイントを含めた設計がしやすいことや、実行順を気にしない簡単な記述で書けるなどのメリットがあることを確認しました。 ですが、そんなDIコンテナ(正確には、DIコンテナを利用したPureC#メインの開発)にも弱点があると思っているので、今回は、DIコンテナ、ひいてはPureC#をメインに使うメリット・デメリットについて見ていきます。 DIコンテナを使ってPureC#を含めるメリット まずは前回の確認的な部分にもなりますが、メリットについて見ていきます。 PureC#でエントリポイントを含めた設計がしやすい 前回の記事でも触れましたが、DIコンテナを使うことでPureC#でエントリポイント(Start()とかUpdate()とかを使えるクラス)を含め

    UnityのDI超ざっくり入門 4 - DIコンテナを利用したPureC#主体の開発のメリット・デメリット
  • UnityのDI超ざっくり入門 3 - VContainerを使ってみる

    はじめに 前回はUnityにおけるDI(Dependency Injection)のちょっと実践的な使用方法についての記事を書きました。 前回での気づきとして、UnityDIはこのままの手順でやるとちょっと面倒になる、というお話をしました。 他にも、UnityDIを手書きで書くデメリットはいくつかあります。 newなどの実行順が大事になってくるのが面倒 エントリポイントの設計がちょっと面倒 MonoBehaviourクラスのStart, UpdateなどのライフサイクルメソッドをPureC#で利用したい場合、GameEntryPointでそれらを呼び出す必要がある 複数個のオブジェクトの依存の解決・動的な依存の解決が面倒 いちいちInit()メソッドを呼び出すのが面倒・保守性が微妙 …要するに、総じて「GameEntryPointを書くのが面倒!!難しい!!」ということです。 今回は、これ

    UnityのDI超ざっくり入門 3 - VContainerを使ってみる
  • UnityのDI超ざっくり入門 2 - [SerializeField]とコンストラクタでPureC#込みのゲーム設計をする

    はじめに 前回の記事では、UnityにおけるDI(UnityDI)の基的な概念について見てきました。 今回は、具体的な実装例を見ながら、UnityDIの基的・実践的な使い方を見ていきます。 [SerializeField]とコンストラクタを使ってゲームの依存関係を解決する ここからは、実際に前回の機能を利用してゲームの依存関係を解決する方法を見ていきましょう。 この話を抜きにしていきなりVContainerなどの話をしてもDIコンテナのメリットがあまり伝わらないと思うので、まずはUnityDIの基を理解しておくことが大事だと思って書いています。 例題 例題として、以下のようなゲームを作ることを考えます。前回の例のもうちょっと実践的なバージョンです。 GameLoopSystemはPlayerのHPを監視し、HPが0になったらGameOverUIを表示する PlayerがCoinと衝突

    UnityのDI超ざっくり入門 2 - [SerializeField]とコンストラクタでPureC#込みのゲーム設計をする
  • UnityのDI超ざっくり入門 1 - そもそもUnityのDIって何?

    はじめに DI(Dependency Injection)。 単語自体を聞いたことがある方はそこそこいるのではないでしょうか。 Unityにおいては、ZenjectやVContainerといった便利なDIライブラリも登場し、その話題もちらほら耳にすることがあるかと思います。 しかしながらそれらのライブラリの意義・メリットが分かりにくいと感じたことはないでしょうか? これには主に以下の2つの理由があると思っています。 UnityにおけるDIのメリット・効能を実践的に示した記事があまりない UnityにおけるDIはちょっと軽めの意味で使われることが多い Zenject / VContainerはDIのライブラリなので、「UnityにおけるDI」が何たるかを知らないと話も分かりづらいですし、何より使う気にならないと思います。 そこで、今回からは、そもそもDIって何がいいのかを知ってもらうことを主

    UnityのDI超ざっくり入門 1 - そもそもUnityのDIって何?
  • MVPパターンでUIを構築するときは、UI自体のActive状態もModelで管理すると便利

    はじめに UnityUIを構築する際に非常に便利なパターンにMVPパターンがあります。 このパターンでは、主にUniRx / R3を利用しながら、Modelを購読したPresenterがViewを更新する(逆もしかり)という流れでUIを構築します。 今回は、このMVPパターンを使ってUIを構築する際に、UI自体のActive状態もModelで管理すると便利なケースを紹介します。 前提 DIちょっとわかる UniRx / R3を使ったことがある MVPパターンちょっとわかる Active状態もModelで管理する 基的にはModelで管理するデータは、UIに表示されるデータやUIの状態などが該当します。この中にActive状態も含むと、画面自体のオンオフや切り替えといった面倒な作業が減り、非常にシンプルな記述で済みます。 例えば、以下のようなケースを考えてみます。 UIの画面自体(以下ス

    MVPパターンでUIを構築するときは、UI自体のActive状態もModelで管理すると便利
  • 最近いい感じだと思っている個人開発のアーキテクチャっぽい何か

    はじめに Unity個人開発をしていて、個人的にそこそこしっくりくるアーキテクチャ的な何かを考えているので、その内容を共有します。 前提 DIちょっとわかる / DIコンテナ使ったことがある VContainerを使っていることを前提としたコード例を書きます Data-View-System 最近やっている開発では、主に以下の3つの要素(レイヤー?)に分けて開発を進めています。 Data View System ECSの設計をちょっと参考にしています。 Data Dataは、ゲーム内で扱うデータを管理するクラスです。状態変数は基的にすべてDataに配置します。 ただ、もちろんViewにてMonoBehaviourを継承する以上このやり方には限界があるので、ある程度はViewにも状態変数を持たせることもあります。 public sealed class PlayerMovementDat

    最近いい感じだと思っている個人開発のアーキテクチャっぽい何か
  • VContainer最新版ではMessagePipeの登録が簡単になっている

    VContainer v1.14.0 で、MessagePipe の登録が簡単になりました。 これまでの登録方法 これまでの登録方法は以下のようになります。 using MessagePipe; using UnityEngine; using VContainer; using VContainer.Unity; public sealed class GameLifetimeScope : LifetimeScope { protected override void Configure(IContainerBuilder builder) { var options = builder.RegisterMessagePipe(); // MessagePipe の登録 builder.RegisterMessageBroker<FooMessage>(options); // Mes

    VContainer最新版ではMessagePipeの登録が簡単になっている
  • LitMotion Guidebook

    UnityのTween系ライブラリとして非常に便利なLitMotionを利用するための簡易的なガイドブックです。

    LitMotion Guidebook
  • 今回のUnity1週間ゲームジャムで学んだ。おすすめできるもの

    はじめに(前回とほぼ同じ) unityroom が開催している 1 週間ゲームジャムである「Unity1 週間ゲームジャム(unity 1 week, u1w)」に参加しました。 お題に沿った Unityゲーム作品を 1 週間で作るという体で遅刻も OK な、比較的ゆるめのイベントです。私は 12 日かけて提出しました。 前回はそこでのゲーム制作について主に設計周りからの反省点を書きました。 前回 ↓ 今回は開発で勉強になったところ・成功したところ・良かったところの中でも共有しやすそうなものを紹介していければと思います。 要件 今回作成したゲームの要件について簡単に俯瞰しておきます。 基ルール プレイヤーが画面端に行くと、反対色になって逆側から出てくる 逆側から出てきた反対色のプレイヤーは、その色に沿ったコライダー(当たり判定)に沿って移動できる ゴールに触れたらレベルクリア、次のレ

    今回のUnity1週間ゲームジャムで学んだ。おすすめできるもの
  • VContainerでFactoryを利用して、複数のComponentの依存を解決したPrefabを作る

    はじめに VContainerはめちゃめちゃ便利なDIコンテナですが、色々と依存性を解決するのが難しい場面もあります。 今回は[Inject]アトリビュートの付いた複数のComponentに対して依存を解決する書き方の一例を提示します。 状況 例えばPlayerCoreクラスとPlayerMovementクラスがあるとします。これらは同じPlayerというGameObjectに紐づいたPrefabとして利用されるという想定です。 これらのComponentには、それぞれ依存先があります。仮にFoo,Barとします。

    VContainerでFactoryを利用して、複数のComponentの依存を解決したPrefabを作る
  • (初学者向け)Unityで汚いコードを減らすための一歩目の知識

    今回は、初心者向けに、Unityで汚いコードを減らすためにまず知っておきたい知識について。 SerializeField UnityのInspector上で値やGameObject等を編集・参照したいことはよくあると思います。 そんな時、以下のようなコードが考えられます。 このとき、hpは、実際にInspector上で編集できます。 しかし、この値はpublicとなっているため、このクラスを参照している全てのクラスがこの変数(以下フィールド)にアクセスできてしまいます。 「別に良くね?」となっている方は特に大丈夫ですが、一度でもpublicに不用意にアクセスして値を改ざんし、とんでもないスパゲッティコード状態になった経験がありましたら、この状況を避けたいと思うことでしょう。 その1つのアプローチとして、SerializeFieldがあります。

    (初学者向け)Unityで汚いコードを減らすための一歩目の知識
  • 1