#roppongiunity #9 六本木発のUnity勉強会まとめ

公開日: 

こんにちは。もぐめっとです。
実は大樹という名も持ち合わせてたりします。実質SLですね。

今回はRoppongi.unity #9 in YouTube Live & clusterに参加してきたので軽くまとめてみました!ご賞味ください!

Addressable Asset Systemをプロダクトで使ってみた

  • Addressableの開発体制や小技を紹介します
  • USでLeapTriggerというARシューティングゲームをリリースした
  • 使用バージョンとして、1.8.3でとても不安定だった。
    • リリース時には1.16.16だった
  • AR使ったアプリなので実機確認が大事。Editor上とで乖離があったりする
    • jenkinsビルドで配布していた
    • AssetBundleのDL方法に悩んだ
  • 開発環境はS3にアップロードして、AssetBundleをDLするようにしている
    • プラットフォームごとで異なるのでフォルダを分けた
  • Profileを弄ると、ダウンロード先の環境先を変数で帰れる。
  • EditorでAssetBundleを落としてEditor拡張でS3に挙げれる仕組みを作った
    • slackを経由してjenkins経由でdeploygateやS3にアップロードしたりしていた
      • クライアントはAssetBundleを意識しない

躓いたポイント

  • キャッシュクリアとして、キャッシュクリアの機能があるが、実現するためにCaching.ClearCacheで消えないので、ClearDependencyCacheAsyncを使うと消せれる
  • DL0%から始まらない問題として、最新版に上げたら治った。
  • AssetGroup画面が重い問題として、GroupWindowを極力開かないようにエディタ拡張を作った
    • 今はAddressableImporterを使うといいかも
    • UIリソースが更新がかかってコンフリクトしたので工夫したりした

まとめ

  • つかいやすくなってきたのでリリースにはたえれるとおもう。

github actionsで作るUnity CI環境

下記の話を体験談まじえて少し詳細にお話しました。 game-ciとfastlaneを組み合わせてgithub actionsでCI環境を実装したお話になります。
そしてiosは闇が深いので頑張ろうっていう感じのお話です。(自分の話なので割愛しがち)
ローカルテストはactを使うといいです。

翻訳VR作ってみた

音声認識比較

  • Cloud SpeechToText, Watson Speech to Text、Speech Recoginizer, Android Speech TTSをためした(細かい比較は資料参照)

翻訳API比較

  • DeepL, CloudTranslation, Microsoft Translatorを試した
    • deepLが一番精度良い
    • 意地悪しない限りはDeepL最強

マルチ対応Tips

  • Photon Voice2を利用。超簡単
    • 多民族同士のコミュニケーション円滑化にしたい
    • オンライン英会話やってて、日本語話せない担当になったときに、何がわからないかを説明しようがないということになってしまう。そういう時に翻訳VRで翻訳結果をカンニングできるようにしたい
  • 実装手順
    • アセットストアからインポートしてIDを設定して、オブジェクトを設置するだけ
    • 困ったこととして、音声認識機能でMicrophoneAPIをつかってるので、既に使ってると言われてしまうので、ボイスチャットにはPhotonのMicrophoneAPIを使う
    • アバターにviewを設定するだけ
  • DLL関連のエラーとして同名DLLが多数存在しているが削除すれば解決
  • レスポンスはどうか?
    • 実用には耐えられない。Speech to textは1,2秒かかる。
    • ボイスチャットもあるのでコミュニケーションは難しい

Unity + MRTKでHoloLens2用音楽ゲームを作る

  • 音楽が始まると億から戦艦が飛んでくるので手で叩き落として得点がたまるゲーム
    • 部屋の奥行きや位置をhololense使えるが、小さい部屋でやると小さい部屋に合わせてサイズも変わる
  • 制作経緯としては、緊急事態宣言でゲームセンターに行きづらいので、楽しいことしたいというのと、HoloLensハッカソンに参加したのがきっかけ
    • アイデア出し、デバッグ3日、実装6日
  • 仕様はランダムにGameObjectを生成してレーンに沿って移動させ、手と衝突したら得点を加算する
  • 実装手順はMRTK Install UI実装、衝突判定、ビルド&デプロイ
    • MRTKはMixedRealityアプリ向けのクロスプラットフォーム開発キット。MR機能をUnityでお手軽に使えるツール。
    • ボタンのprefabをシーンに追加するだけで簡単にボタンをおせるようになったりする
    • UI実装については、レーン配置
      • Scaleは1が1mなので、10にすると10mとかの大きさになる
  • MRでゲームを作ってみて、シンプルなゲームのほうが遊びやすいのと、UXが結構重要で操作が複雑だととっつきにくく、あきやすくなってしまう
  • まとめ
    • 衝突判定はやりやすいが、ドキュメントは少ない

レーシングゲームにおける AI 設計

  • 自律的に走るAIをのせることにより、重大な事故を起こさず完走するAIをつくったので、どのような考えで作ったかを紹介
  • プレイヤーやNPCがのるのをユニットとして表現してます。
    • ユニットは液体の上にのり、急にはまがれないのでカーブでははやめにまがらないといけない
    • コースには壁があり、ぶつからないようにする必要がある制約がある
  • プログラムの構成
    • Navigator: 液体状でのユニットの動きを計算する。水面での動きを計算する
    • Manipulator: AIのプログラムを実行するランナー。アクセルと旋回力をNavigatorに渡して計算する
    • ManipulationLogicには到達する情報などが入っている。
    • 全てのAIの計算が終わったらManipulatorからUnitに渡す
  • 目標に向かって走る。急旋回したらアクセルを落としたりなどをする
    • 目標地点はユニットが十分近くまできたら次の場所に向かうようにしている
  • 左右のユニットを避けるのは、両方から接近してたらハンドルを制御する。
  • 壁への衝突を未然に防ぐために、壁とは反対の方向へアクセルをふんだりするようにした

利点

  • 拡張性が高い。
  • プレイヤーの操作、デバッグキーボード操作、レースの補助など、継承すれば実装できる
    • 実際にはNPCや、人間、場面などに応じて操作を変えてる

FrameDebugger VS RenderDoc

FrameDebugger/RenderDocって何?

  • GraphocDebugToolの一つ
    • アプリの描画状況や負荷がみれる
  • FrameDebuggerはUnityにもともとある

比較結果

  • FrameDebuggerはUnityに付属していてUIがシンプル。覚えることが少なかった。
  • RenderDocは負荷計測値や頂点の値など細かい情報がみれるので、アプリの描画負荷チューニングするならこちら

機能の比較

  • FrameDebuggerはDevelopmentBuildにチェックすれば動く。動かしてる画面を上書きしてPreviewが表示される
  • RenderDocは、Editor&Windows, Linux, Androidのみで、Macでは動かない。
    • Development Buildを作る必要がないので、アプリそのままでみれる
  • EventBrowser
    • DrawCall一覧がみれる
    • FrameDebuggerはEditroの場合そのタイミングであるScnee上のものをピックアップしてくれる
    • RenderDocは時計マークをクリックすると、現在動いている環境での処理時間が計測されるが、Editorキャプチャーした場合はEditorUIのものも表示されてみづらいのでEditorで見るのはおすすえmしない
  • MeshView
    • DrawCall内で描画されるModelの詳細が見れる
    • FrameDebugger: ShaderProperties(テクスチャなど)がみれる。Editorの場合、リソースに飛べる
    • RenderDoc: vertex shaderのIn/Outの値が数字でPreviewで見える。アプリでモデルが爆発したら一定の値になってshaderの値が悪いことがわかったりする。しかしそれ以外はつかいづらい
  • TextureView
    • DrawCallでの各Textureの状態が見れる。Depthの状態を見れたりもする
    • FrameDebugger: GameタブにRTの状況が表示され、アプリだとアプリに表示される・
    • RenderDoc: DrawCallで書かれたのをハイライトできる。右クリックでピクセル単位のDraw履歴が見れる。
  • その他
    • FrameDebugger自体はシンプル
      • inspector上でみれるので覚えることが少ない
    • RenderDoc: より細かい情報が見れる。
      • pipeline stateでの描画までの設定が見れたり、performance counter viewで並び替えができる
  • どちらがいいか?
    • さっとみるならFrameDebugger
      • Editorで開発して途中で気になる箇所のチェック
    • チューニングするならRenderDoc
      • アプリで見る場合
  • RenderDocの仕組みは?
    • directXなどのコマンドをgpuで直接見てるのではないか。

Unityで仮想通貨を取扱えるようにしてみた

  • UnityCipher, UnityDotenv, Bitabnk Unity SDKを公開してる
  • unity使ってものを作るが、世界中からお金が集まるようにしたかった
    • 暗号資産は世界中どこでも使えるお金になる。
    • 暗号資産交換業のライセンスをもってないと日本円と交換できない
  • 仮想通貨の交換所は大体API公開されてるのでそれみればなんとかできる。
  • アカウント情報が漏れると大変なので考えないといけない
  • UnityDotenvを実装した時の小ネタとして、AssetPostprocessorやEditroWindowなどを利用できるようにならない
  • Bitbankのアカウントを作ってAPI Keyを発行して使う

Unity EditorからADX2の出力データを直接いじる魔改造

  • CRI ADX2とは、音の演出が組み込まれたライブラリツール
    • 音をカテゴリわけして制御情報を埋め込む
    • AndroidなどのXR機器にも効果ある
    • インディ向け無償エディションもある
  • ADX2ではAtomCraftというものを使って音に設定を埋め込む。
    • フルボイスのゲームや楽曲がたくさんあるときの管理、演出作りに集中したり、サウンドデザイナーと分業して作れる
    • この音はフェードイン、繰り返しは2回までなど、metadata的に埋め込んでUnityに渡す
    • ゲームの音をタグで分けたり、ツリーで管理しながら組み込むワークフロー
  • ADX2で面倒なこと
    • 別ツール体制のデメリットとして、ゲームと音が密接に演出するとUnityといったりきたりしないといけない。
      • サウンドの設定をみすっていると、AtomCraftを立ち上げて読み込ませないといけない
    • 一人だと分業メリットはない
    • サウンドデザイナーでもUnityEditorでやりながら調整する人も増えてる
  • AtomCraft開かずに調整したいということで、ADX2 for Unity Change Cue SettingsというEditorExtensionを作った
    • 1回しか再生されないのを4回まで重なって再生させるなど挙動の変更ができるようになったりする
    • 仕組みとしてロボット機能を使ってスクリプトの生成と、Processでexe実行してEditor上から操作可能なようにしている
  • 関連情報
    • python経由でなくてもいい。
    • python for unityとの併用でなにかやりやすくなるかも?
    • adxツールを使ってる人がいる場合はパラメータが勝手に変わるのでワークフローをしっかり考えておきましょう

@mogmetの所感

今回はyoutube以外にもclusterでも配信していて、観客の様子が視覚的に見えるのはなかなか面白い試みで、オフラインでもオンラインに近い感じで勉強会を参加することができたのがよかったです。

また、もぐめっとてきにはAddressable Asset Systemを昔導入しようとして、非同期でしかロードできなかったのでうまく組み込めず断念したのですが、最近同期的でもよみこめるようになったとの話があったので、機会あったら導入チャレンジをまたやってみようとおもいました。
  • このエントリーをはてなブックマークに追加
  • Pocket
PAGE TOP ↑