Unity系の勉強会行きたいな、と思っていたら伊藤さんが面白そうなテーマで勉強会をやるとのことだったので、Drecom Tech Espresso #6 "おなかソフトのDontDestroyOnLoad" に行ってきました。
今回の勉強会はテーマごとにフリートークの形式だったのでトークテーマごとにメモを添えています。
なお登壇されていたのは、司会の伊藤周さん、殺意駆動開発さん、とりすーぷさん、ドリコムの西村さんでした。なお会場では顔認識させたアバターが喋ってました。(伊藤さんはWrap3だった模様。
※詳しくはconnpassのページ参照のこと。
テーマ1:Singleton
最初に、シングルトンパターンに関してどう考えているか?という問いからフリートークはスタートした。
- グローバルアクセスできるし、テストがしづらくなる。
- UnityがStaticで用意しているものはラッピングしてしまっていいかも
というような意見が出る中で「複数人で作ることが前提で、シングルトンなしでできるのか?」という問いに対して会場に意見を投げかけてみたところ、会場にちらほら数名だけ手があがるが、やはり難しいという話に落ち着きました。
次にシングルトンにするかしないかの判断はあるか?という問いかけがあり
- Managerクラスを作るような場合はZenjectを使う
というような話のあとに、シングルトンのデータ初期化に関しての話となり、「リセットはどうするか?」という話になり
- シングルトンに状態を持たせてはいけない。
- 基本的にリセットするようなデータは持たせるべきではない。
などの話が出ました。
シングルトンが悪いわけではなく、シングルトンの利便性が高すぎる故に…
- いろいろなところからアクセスできると、コントロールしているのは誰か?のように責任の所在が不明になる
- 複数人開発の場合はシングルトンにいろいろな機能が足されて行ってしまう
というようなことに問題が出てくるという話でした。
関連リンク
テーマ1.5:シーンの話
フリートークメモ
シングルトンの話から派生して、シーンをどう管理するかというテーマになった。
西村さんとしては管理を簡易にするためにひとつのSceneで運用しているという。
ひとつのSceneで管理するという手法はUnity4から5の時代にはベストプラクティスとされていたが それとはまた違う形で行っており
- SceneのHierarchy構造をしっかりと作る
- そこに対してPrefabを当て込んでいき、上から重ねられるPrefabとする。
という話だった。
とりすーぷさんはマルチシーンの事例を紹介して
- ViewのSceneとModelのSceneを分ける
- オンライン対戦とローカル対戦を行うゲームだったが、表示部分は共通だったので、オンライン/ローカルの部分をModelシーンとして実装した
というMVCの変化球のような事例を話していた。
チーム開発の場合はどうやって分担するかによるので、マルチシーンでもPrefabの複数分離でもどうやって行くかが肝になるのではという話にもなった。
関連リンク
- 【電子】UNIBOOK8 - Unity部 - BOOTH(同人誌通販・ダウンロード)
- 「もののけ大戦“陣”」製作事例 - おそらくベストプラクティスになってたのはこのぐらいの時期のハズ
テーマ2:MVC,MVP
フリートークメモ
Web開発の文脈ではよく使われるMVC/MVPだが実際の開発ではどう行われているかという話。
- 使いかはチームによりけり、チームによって様式が決まるし、MonoBehaviourがついてないと動かなかったりもするのでそれ次第。
- MVPを意識して作っていない過去のものなどあるが、それを振り返ると密結合になったり、Prefabが壊れたりしても気づかないなどの弊害があるのでもうやらない
- Web開発の文脈なので、コンシューマーゲームだと違うように感じられるが、振り返ってみるとMVPの形を踏襲しているものはあったりした。ゲームは常にupdateループを回すのでPassive型のMVPに近いように感じられた。
- uGUIを使うような場面ではMVPだけど、インゲームの部分ではMVPの概念は利用できない。
みたいなお話でした。
関連リンク
- 昨今のUnity開発におけるMVP設計思想についてと、それの適用可否の話 - かせノート。
- 【プログラミング】MVC,MVPを理解するためのレイヤーアーキテクチャ - かせノート。
- Webアプリケーション開発者から見た、MVCとMVP、そしてMVVMの違い - Qiita
- 「Unity テスト完全に理解した #1」に登壇しました - もんりぃ is undefined. - アーキテクチャ論議ならこちらも
テーマ3:サウンド
フリートークメモ
- (個人開発をしているとりすーぷさんだと)シングルトンとADXを使っている。自身とは別に音を作ってくれる人がいたのでその人にADXを利用して活用してほしかったが、結局自分でやったので振り返るとUnity備え付けの機能でもよかったかも
- 音のレイテンシとか考えないパーティゲームのようなものはシングルトンでも問題ないかも
- オーディオがゲームの根幹になると「自前でサウンドシステムをつくる」か「ADXのようなツールを使う」という2択になる。
- nGUIのボタンのような、コンポーネントにサウンドをくっつけるという方式があるが、付け忘れが怖い。そのためにも必ずボタン処理として通るところにデフォルトの音声を乗せて、変えたい場合は上書きするなどの手法をとっている
- オーディオはテストのしようがないのでシングルトン、という考えが多かった
関連リンク
- 無償版サウンドミドルウェア「CRI ADX2 LE」 - CRI Middleware
- Unity 5のサウンド機能をADX2 LEで強化する - Qiita
- Unityでサウンドエンジン(ADX2, Wwise, FMOD)を扱う際におさえたい事 - Qiita
テーマ4:ネットワークライブラリ
フリートークメモ
開始一番「UNETの話はしたくない」から始まり、Photonかモノビットかという話に。
とりすーぷさんがPhotonで実装した話をスライドを交えて紹介、サーバサイド実装がかけなかったのですべてクライアントで実装するというかなり気合の入った話に。
これもケースバイケースという話になり、ターン制のバトルなどは遅れなどは気になりにくいが、PUBGのようなリアルタイムでどうこうするゲームの場合は途端に実装難度があがる。
今後はUnityでも実装が増えていくだろうという話もあった。