勉強会のレポート(メモ)です。
参加したのはこちら「Gotanda.unity #18」
アーカイブはこちら
togetterまとめはこちら
- Gotanda.unityとは
- LT#1 (スポンサー枠) Mikito Yoshiya: 使われやすいライブラリのための「コ・ツ」〜社内Unityライブラリの思想と設計〜
- LT#2 tetsu: 個人開発でも使ってみようAddressable Asset System
- LT#3 yutopp: Unityで使えるglTFライブラリを作る話
- LT#4 Cova@8bitdots: Unityサウンドでできる閉所表現
- LT#5 らかん: 初めて1WeekGameJamに参加した話
- LT#6 (スポンサー枠) Kenta Nagai: Addressablesで大量のリソース管理・ 困りどころと解消法
- LT#7 KENTO: withARハッカソンに参加した話
- LT#8 ぶんぶん: VR自動テストの導入によるプロジェクトの改善と、新卒一年目の苦悩
- LT#9 小林拓: ネイティブアプリ作成のためのUI EditorツールとしてのUnity
- スポンサー紹介
- クロージング
Gotanda.unityとは
都内近郊を中心に活動を行うUnityユーザのコミュニティです
Unityに興味がある人であれば、どなたでも気軽にご参加いただけます!
(五反田発の勉強会であることから「Gotanda.unity」というネーミングになっております)
LT#1 (スポンサー枠) Mikito Yoshiya: 使われやすいライブラリのための「コ・ツ」〜社内Unityライブラリの思想と設計〜
先ほどの発表資料です!Simple - EasyなLibraryの話https://t.co/7jgTPH3Omc
— Mikito Yoshiya (@mikito0521) 2021年5月26日
#gotandaunity
今回はUnityのライブラリを作る時に気をつけたいことについてお話します。
宣伝
スライド内で紹介したUnity入門書改訂版(Unity2021対応)発売されます!よろしくお願いします!https://t.co/EYB4383sk4#gotandaunity
— Mikito Yoshiya (@mikito0521) 2021年5月26日
SimpleとEasyは同じようで違う
Simpleは単純であること、Easyはすぐに使い始められること。
どっちが大事かというよりは区別することが大事。
今回はSimpleさを保つためのコツを3テーマに分けて紹介します。
混ぜない・絡ませない
いろいろできるはEasyだけど複雑。
→コンセプトを明確にして責務を1つにして分けていく。
適切な名前をつけることも大事。
多くの要素・ライブラリに依存
依存は複雑なもの。UPM的に問題もある。
→依存を排除することは難しいが依存先が安定しているか厳選すること。
公式の機能や標準に依存するのはよい。
設定や手順を隠蔽しない
ライブラリが大きくなると複雑性が増してしまう。
→抽象化して拡張できるようにしておく。
提供しすぎない
不要なInterfaceは公開しない。拡張に開いて変更に対して閉じる。
超絶UXなエディター拡張
まとめ
ライブラリ開発ではSimple/Easyを区別することが大事
Simpleさを保つために「混ぜない・絡ませない」「設定や手順を隠蔽しない」「提供しすぎない」
LT#2 tetsu: 個人開発でも使ってみようAddressable Asset System
本日 #gotandaunity にて発表した資料です。
— 鉄 (@tetsujp84) 2021年5月26日
「個人開発でも使ってみようAddressableAssetSystem」https://t.co/qYlC8Bl5uv
制作中のリズムゲーム「Liminality」でAddressable Asset Systemに移行したお話をします。
Addressable Assets Systemを使うメリット
・Resourcesからの脱却
・追加ダウンロードの仕組みを簡単に整えられる
・ビルドインと追加ダウンロードのリソースを区別せずに使える
アセットのロード
リズムゲームでアセットと使うものは、ジャケット画像(.png)、音源(.acb)、譜面データ(.json)です。
これらをひとまとめにしたものをグループ化しています。
ビルドインのリソースと追加ダウンロードのリソースでAsset Groupを分けておきます。
CRI ADX2と連携
CRI ADX2のロードはダウンロード機構を自分で作る必要がありますがAddressables Assets Systemを載せると他リソースと同様に扱えます。ただし注意点はいくつかある
CIとの連携
Unity Cloud Buildを活用しています。
追加ダウンロードのリソースはUnity Cloud Buildの設定からビルドできるがビルドインリソースのビルドも都度必要になる。
Addressable Asset Systemを導入してみて
・個人開発レベルでも導入できる
・リソースの追加・更新があるプロジェクトにはすごく有効
・CRI ADX2と一緒に使える
・CIと連携するとより使いやすい
LT#3 yutopp: Unityで使えるglTFライブラリを作る話
今日の発表資料です。 #gotandaunity https://t.co/rNXT6ZcCUY
— ぶんちょう (@yutopp) 2021年5月26日
glTFライブラリを作る時にやってよかったことと実装できずにちょっとはまったところについてお話します。
作るモチベーション
・Unityと共存してテストやCIがしやすいライブラリが作りやすかった
・glTFの拡張とUnity・非Unityで厳密に責務を分けた設計をしたかった
成果物
ファイル形式関連部分を.NET単体のプロジェクトで作ったろ事便利だった
C#のライブラリで作らず、Unityのパッケージ構造を踏襲しつつコード自体はUnityに依存しない、
一方でdotnetコマンド単体で認識できるように作ってみました。
これをやるとUnity依存がない部分は.NETライブラリとして開発できます。
座標系が違う状態でskinningをimport/exportするのが難しい
UnityとglTFでは座標系が違うため軸や符号を反転させる必要がある。
glTFはskinningのinverseBindMatricesはアフィン変換行列の指定しかできない。
Translateの値はそのまま分解できるがRotationとScaleは分解できない。
→Scaleは全て1とみなすか、inverseBindMatricesが単位行列になるようにmeshに焼きこむ
まとめ
もしglTFでskinを出力した時になんかゆがんだりしてるなと思ったら行列を疑うと幸せになるかも
LT#4 Cova@8bitdots: Unityサウンドでできる閉所表現
先ほどの登壇資料ですが、サウンドデモの関係上、極力アーカイブか後日アップ予定のUnityLearningMaterial でチェックしていただくのを推奨です!!!https://t.co/E7OdSyIOGM#gotandaunity
— Cova (@8bitdots) 2021年5月26日
実装方法の解説やサウンドのデモがあるので動画でご覧ください
まとめ
サウンドの設計を考えよう
・ルーティングやカテゴリ設定はミドルウェア関係なく必要
・AudioMixerはその設定が簡単
AudioMixerにはまだまだ機能があるのでまずは使いこなしてみましょう。
そのうえで実現できない表現が出てきたらミドルウェアに頼りましょう。
いきなりミドルウェアを導入しても前提知識がないと使いこなせない。
資料
今回のリポジトリ
LT#5 らかん: 初めて1WeekGameJamに参加した話
今回作ったゲーム
参加した動機
Unityをもっと使いこなせるようになりたい
→やっぱ作ることが重要
テーマ設定
テーマが2なので「二重の極み」を題材にしました。
・指の部分を再現したい
・粉々に砕くアクションが欲しい
・爽快感のあるゲームにしたい
モーション作成
キワミのモーションがなかったので自作しました。
Cascadeurというソフトがよさそうなので使ってみました。
体のモーションは作りやすかった。
指のモーションはVery Animationでつけなおしました。
GameStateと動作
GameStateはUniRxのEnum型で管理。変更があった時だけ実行するように。
カメラ制御
カメラはCinemachineを使用。
オブジェクトに回り込むカメラや、手振れや振動の表現をやってもらう。
おわりに
学ぶことがすごく多かった
ゲームの面白さまで作りこむのは大変だった
LT#6 (スポンサー枠) Kenta Nagai: Addressablesで大量のリソース管理・ 困りどころと解消法
Addressable Asset Systemの運用の中身をお伝えします。
開発初期の課題
開発が進むとリソースの管理が大変になる
→技術選定としてAddressablesを使用 効率化していかないとまずい
設計
柔軟性の高いシンプルなアセット設計を目指す
・依存関係を最小限にする(1bundleに他のbundleを依存させない)
・命名規則をしっかり決める(発注書の記載、納品データ、マスタデータなど命名規則シートを作成)
運用開発の問題
・グループのコンフリクトが問題になった(.assetやCRI.project)
→無理やり頑張ってマージする
実際は作業ブランチでグループを分ける
・Addressablesのバグ
手をつけていないリソースのIDも変わり、そのファイルの再DLが入ってしまう
→グループをしっかり分けて重ならないようにする
のちに更新で解決
・バージョン管理の問題
アプリに内包していた(最初に外出しする予定がなかった)リソースを外出ししようとしてhash値をつけ忘れファイルの上書きが発生してしまった
→hashをつけて再アップロードで解決
・DLの容量を最小限に
イベントとかのリソースは再度ビルドしないようにしてユーザーにDLさせないようにした
→マスタデータはあるがリソースがなくて落ちる
チームでのすり合わせの仕組みや理解が必要
終了したイベントなどのリソース削減タイミングのすり合わせが重要
まとめ
・柔軟かつシンプルな設計に
・Addressablesは万能ではない
・仕組みやフローはエンジニア以外も共有すると運用しやすい
LT#7 KENTO: withARハッカソンに参加した話
Nreal(AR)開発TipsとLiDER*1で空間スキャン表現についてお話します。
withARハッカソンとは
ARエンジニアと異業種のコラボレーションを通じて新しい領域に挑戦するハッカソンです。
参加したハッカソンは伝統工芸×AR。テーマは「贈りたくなる陶器」でした。
Nreal(AR)開発Tips
Nrealとは
Nrealとはメガネ型のMRグラス。前面のカメラを通していろんな機能が使える。
陶器を中心にエフェクトを出したかったので、平面認識機能を利用して自分で位置合わせをするようにした。
NearClipへの対応
カメラまでの距離が近いと描画されなくなる。
NearClipより少し離れた地点で衝突判定を取り、一度エフェクトを拡大させながらフェードアウトさせた後にフェードインすることで、あいだを映さないようにした。
Scaniverse
LiDER搭載の端末で動作する空間・物体のスキャンアプリ。
Unity上で実寸で使うことができるので、エフェクトのサイズ感や座標をエディター上で確認できる。
LiDERで空間スキャン表現
屋内外問わず周辺5m以内の物体までの速度を測定し深度を測定できる。
Scaniverseのようにリアルタイムで空間のMesh生成が可能になる。
スキャン表現を作るうえでAR Foundation Editor Remoteと呼ばれるツールを使いました。
参考リンク
LT#8 ぶんぶん: VR自動テストの導入によるプロジェクトの改善と、新卒一年目の苦悩
今日のGotanda.unityで話した資料です #gotandaunity https://t.co/OGwafZydHU
— ぶんぶん (@adoring_onion) 2021年5月26日
自動テストを根付かせるまでの戦い
ノリでVRの会社に入ったがUnityがわからなかった。
会社はスタートアップなので一緒に入ったインターン以外全員中途でレベル差なんてもんじゃなかった。
チームのプロジェクトにテストが1個もなかった。毎回手作業のAQで確認していた。
→自動テストの環境があることを知っていたので作成開始。(作り方知らないけど)
苦労したこと
・社内に自動テストの知見がなかったため全部ひとりで調べる必要があった
・VRの自動テストの前例が見つからなかった
adb touchを使ってカメラの回転方向・角度を指定できるようにした(もっといいやり方はある)
一か月半かけて完成したが誰も使ってくれなかった・・・
・自分以外に書ける人がおらずブラックボックス化
・自動テストの知見を持つ人がいない
みんなに使ってもらうために
・ドキュメントを整備する
・自動テストについての勉強会を開いた
・Slackコマンドから気軽に実行できるようにした
・毎晩リグレッションテストを実行して有用性を知ってもらう
半年かけて根付かせることに成功
まとめ
・自動テストを導入して、レグレッションを検知して手戻りを防ぐことができ、自動テストを前提とした議論ができるようになった。
・スタートアップは手取り足取り教えてくれないので、TwitterやDiscordで質問できる人を作っておく
・何もできることがない→誰もやってないことをやることが大事
・大変だけど楽しいこともある
LT#9 小林拓: ネイティブアプリ作成のためのUI EditorツールとしてのUnity
この後Gotanda.unityにて
— TakuKobayashi (@taptappun) 2021年5月26日
最後に発表する用の資料はこちらhttps://t.co/W5qXcjvdr3
資料を作ってみて、完全に発表する内容のターゲット層を間違えたなぁと思ったのですが...
まぁこの内容を別のところで発表しにいけばいいやぁということで...#gotandaunity
スポンサー紹介
ワンダープラネット株式会社
エンターテインメントサービスを生業としています。五反田にオフィスがあります。
最近東証マザーズへの上場が承認されました。
シンプルだけど奥深い事業をしています。グローバル展開を行う専用のスタジオがあります。
社内社外のプロダクトをローカライズしてパブリッシュしたりもしています。
エンジニア募集中なので興味のあるかたはこちらからどうぞ。
株式会社キッズスター
こどもの夢中を育てますというミッションを掲げています。
主に子供向けのプロダクトを作っている会社です。
お子様向けの職業体験アプリ「ごっこランド」を作成しています。
エンジニア絶賛大募集中なのでWantedlyか@monryまでどうぞ
クロージング
・感想ツイート/ブログをよろしくお願いします。
・スポンサートークをしてみたい企業様を募集しています。
・次回は大体7月くらいです。
以上です。
間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。
*1:LiDARのことだと思いますがそのまま記載します