コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

『Drecom Tech Espresso #6 "おなかソフトのDontDestroyOnLoad"』に行ってきたよメモ

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の複数分離でもどうやって行くかが肝になるのではという話にもなった。

関連リンク


テーマ2:MVC,MVP

フリートークメモ

Web開発の文脈ではよく使われるMVC/MVPだが実際の開発ではどう行われているかという話。

  • 使いかはチームによりけり、チームによって様式が決まるし、MonoBehaviourがついてないと動かなかったりもするのでそれ次第。
  • MVPを意識して作っていない過去のものなどあるが、それを振り返ると密結合になったり、Prefabが壊れたりしても気づかないなどの弊害があるのでもうやらない
  • Web開発の文脈なので、コンシューマーゲームだと違うように感じられるが、振り返ってみるとMVPの形を踏襲しているものはあったりした。ゲームは常にupdateループを回すのでPassive型のMVPに近いように感じられた。
  • uGUIを使うような場面ではMVPだけど、インゲームの部分ではMVPの概念は利用できない。

みたいなお話でした。

関連リンク


テーマ3:サウンド

フリートークメモ

  • (個人開発をしているとりすーぷさんだと)シングルトンとADXを使っている。自身とは別に音を作ってくれる人がいたのでその人にADXを利用して活用してほしかったが、結局自分でやったので振り返るとUnity備え付けの機能でもよかったかも
  • 音のレイテンシとか考えないパーティゲームのようなものはシングルトンでも問題ないかも
  • オーディオがゲームの根幹になると「自前でサウンドシステムをつくる」か「ADXのようなツールを使う」という2択になる。
  • nGUIのボタンのような、コンポーネントにサウンドをくっつけるという方式があるが、付け忘れが怖い。そのためにも必ずボタン処理として通るところにデフォルトの音声を乗せて、変えたい場合は上書きするなどの手法をとっている
  • オーディオはテストのしようがないのでシングルトン、という考えが多かった

関連リンク


テーマ4:ネットワークライブラリ

フリートークメモ

開始一番「UNETの話はしたくない」から始まり、Photonモノビットかという話に。

とりすーぷさんがPhotonで実装した話をスライドを交えて紹介、サーバサイド実装がかけなかったのですべてクライアントで実装するというかなり気合の入った話に。

これもケースバイケースという話になり、ターン制のバトルなどは遅れなどは気になりにくいが、PUBGのようなリアルタイムでどうこうするゲームの場合は途端に実装難度があがる。

今後はUnityでも実装が増えていくだろうという話もあった。

関連リンク


全体を通しての感想

  • リアルな開発の話と、実際どうやって実装してるの?みたいな話が混ざりあったとても学びの多い勉強会でした。
  • このブログの過去記事をご覧の通り、普段はRails書いているWeb屋の人だったのでアウェイ感ハンパなかった。
  • まさかの自身のMV*比較記事が出てきてびっくり、ツイートでも書きましたがあれは主にWeb開発者/スマホエンジニア向けの資料なのでゲームだともうちょっと違う観点で書いてみたい…。
  • 次回もあればぜひ行きたいと思いました。