Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【勉強会レポ】: Gotanda.unity #18

勉強会のレポート(メモ)です。
参加したのはこちら「Gotanda.unity #18」

meetup.unity3d.jp

ハッシュタグ : #gotandaunity

 

アーカイブはこちら

www.youtube.com

 

togetterまとめはこちら

togetter.com

 

 

Gotanda.unityとは

都内近郊を中心に活動を行うUnityユーザのコミュニティです
Unityに興味がある人であれば、どなたでも気軽にご参加いただけます!
(五反田発の勉強会であることから「Gotanda.unity」というネーミングになっております)

 

LT#1 (スポンサー枠) Mikito Yoshiya: 使われやすいライブラリのための「コ・ツ」〜社内Unityライブラリの思想と設計〜

今回はUnityのライブラリを作る時に気をつけたいことについてお話します

宣伝

SimpleとEasyは同じようで違う

Simpleは単純であること、Easyはすぐに使い始められること。
どっちが大事かというよりは区別することが大事。
今回はSimpleさを保つためのコツを3テーマに分けて紹介します

混ぜない・絡ませない

いろいろできるはEasyだけど複雑。
→コンセプトを明確にして責務を1つにして分けていく。
適切な名前をつけることも大事。

多くの要素・ライブラリに依存

依存は複雑なもの。UPM的に問題もある。
→依存を排除することは難しいが依存先が安定しているか厳選すること。
公式の機能や標準に依存するのはよい。

設定や手順を隠蔽しない

ライブラリが大きくなると複雑性が増してしまう。
→抽象化して拡張できるようにしておく。

提供しすぎない

不要なInterfaceは公開しない。拡張に開いて変更に対して閉じる。

超絶UXなエディター拡張

GUIは基本的には複雑なもの
GUIが必要か考えること

まとめ

ライブラリ開発ではSimple/Easyを区別することが大事
Simpleさを保つために「混ぜない・絡ませない」「設定や手順を隠蔽しない」「提供しすぎない」

 

 

 

 

LT#2 tetsu: 個人開発でも使ってみようAddressable Asset System

制作中のリズムゲーム「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ライブラリを作る話

glTFライブラリを作る時にやってよかったことと実装できずにちょっとはまったところについてお話します

作るモチベーション

・Unityと共存してテストやCIがしやすいライブラリが作りやすかった
・glTFの拡張とUnity・非Unityで厳密に責務を分けた設計をしたかった

成果物

github.com

ファイル形式関連部分を.NET単体のプロジェクトで作ったろ事便利だった

C#のライブラリで作らず、Unityのパッケージ構造を踏襲しつつコード自体はUnityに依存しない、
一方でdotnetコマンド単体で認識できるように作ってみました。

 

これをやるとUnity依存がない部分は.NETライブラリとして開発できます。

座標系が違う状態でskinningをimport/exportするのが難しい

UnityとglTFでは座標系が違うため軸や符号を反転させる必要がある。
glTFはskinningのinverseBindMatricesはアフィン変換行列の指定しかできない。

marupeke296.com

Translateの値はそのまま分解できるがRotationとScaleは分解できない。
→Scaleは全て1とみなすか、inverseBindMatricesが単位行列になるようにmeshに焼きこむ

まとめ

もしglTFでskinを出力した時になんかゆがんだりしてるなと思ったら行列を疑うと幸せになるかも

 

 

 

LT#4 Cova@8bitdots: Unityサウンドでできる閉所表現

実装方法の解説やサウンドのデモがあるので動画でご覧ください

 

 

まとめ

サウンドの設計を考えよう
・ルーティングやカテゴリ設定はミドルウェア関係なく必要
・AudioMixerはその設定が簡単

AudioMixerにはまだまだ機能があるのでまずは使いこなしてみましょう。
そのうえで実現できない表現が出てきたらミドルウェアに頼りましょう。
いきなりミドルウェアを導入しても前提知識がないと使いこなせない。

資料

今回のリポジトリ

github.com

 

Unityサウンド エキスパート養成講座

Unityサウンド エキスパート養成講座

  • 作者:一條 貴彰
  • 発売日: 2019/08/27
  • メディア: 単行本
 

 

 

 

 

LT#5 らかん: 初めて1WeekGameJamに参加した話

今回作ったゲーム

unityroom.com

参加した動機

Unityをもっと使いこなせるようになりたい
→やっぱ作ることが重要

テーマ設定

テーマが2なので「二重の極み」を題材にしました。
・指の部分を再現したい
・粉々に砕くアクションが欲しい
・爽快感のあるゲームにしたい

モーション作成

キワミのモーションがなかったので自作しました。
Cascadeurというソフトがよさそうなので使ってみました。

cascadeur.com

体のモーションは作りやすかった。
指のモーションは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上で実寸で使うことができるので、エフェクトのサイズ感や座標をエディター上で確認できる。

qiita.com

LiDERで空間スキャン表現

屋内外問わず周辺5m以内の物体までの速度を測定し深度を測定できる。
Scaniverseのようにリアルタイムで空間のMesh生成が可能になる。

スキャン表現を作るうえでAR Foundation Editor Remoteと呼ばれるツールを使いました。

qiita.com

参考リンク

zenn.dev

styly.cc

qiita.com

qiita.com

 

 

 

 

LT#8 ぶんぶん: VR自動テストの導入によるプロジェクトの改善と、新卒一年目の苦悩

自動テストを根付かせるまでの戦い

ノリでVRの会社に入ったがUnityがわからなかった。
会社はスタートアップなので一緒に入ったインターン以外全員中途でレベル差なんてもんじゃなかった。

 

チームのプロジェクトにテストが1個もなかった。毎回手作業のAQで確認していた。
→自動テストの環境があることを知っていたので作成開始。(作り方知らないけど)

苦労したこと

・社内に自動テストの知見がなかったため全部ひとりで調べる必要があった
VRの自動テストの前例が見つからなかった
adb touchを使ってカメラの回転方向・角度を指定できるようにした(もっといいやり方はある)

 

一か月半かけて完成したが誰も使ってくれなかった・・・
・自分以外に書ける人がおらずブラックボックス
・自動テストの知見を持つ人がいない

みんなに使ってもらうために

・ドキュメントを整備する
・自動テストについての勉強会を開いた
・Slackコマンドから気軽に実行できるようにした
・毎晩リグレッションテストを実行して有用性を知ってもらう

半年かけて根付かせることに成功

まとめ

・自動テストを導入して、レグレッションを検知して手戻りを防ぐことができ、自動テストを前提とした議論ができるようになった。
・スタートアップは手取り足取り教えてくれないので、TwitterやDiscordで質問できる人を作っておく
・何もできることがない→誰もやってないことをやることが大事
・大変だけど楽しいこともある

 

 

 

LT#9 小林拓: ネイティブアプリ作成のためのUI EditorツールとしてのUnity

 

 

 

 

 

スポンサー紹介

ワンダープラネット株式会社

エンターテインメントサービスを生業としています。五反田にオフィスがあります。
最近東証マザーズへの上場が承認されました。 

 

シンプルだけど奥深い事業をしています。グローバル展開を行う専用のスタジオがあります。
社内社外のプロダクトをローカライズしてパブリッシュしたりもしています。
エンジニア募集中なので興味のあるかたはこちらからどうぞ。

www.wantedly.com

 

株式会社キッズスター

こどもの夢中を育てますというミッションを掲げています。
主に子供向けのプロダクトを作っている会社です。

お子様向けの職業体験アプリ「ごっこランド」を作成しています。

biz.kidsstar.co.jp

 

エンジニア絶賛大募集中なのでWantedly@monryまでどうぞ

www.wantedly.com

 

 

 

クロージング

・感想ツイート/ブログをよろしくお願いします。
・スポンサートークをしてみたい企業様を募集しています。
・次回は大体7月くらいです。

 

 

 以上です。

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

*1:LiDARのことだと思いますがそのまま記載します