勉強会のレポート(メモ)です。
参加したのはこちら、「Unity UIエンジニアリング勉強会」
会場はNIFcLoungeさんです。
unity-ui-avengers-outgame.peatix.com
- #1 『もしあなたがアウトゲームをつくるときになったらやること』 @masakoha523
- #2 UnityのUIでやってはいけないこと
- LT1 『ちょっとしたUIの変更を楽にする手法』@tty_yamada
- LT2 『Presetでちょっぴり楽するUI組み立て』@lycoris102
- LT3 『ScrollViewアセットマスター』@azumagoro
- 懇親会
- タイムライン
- おまけ
- 他の方の感想ブログ
#1 『もしあなたがアウトゲームをつくるときになったらやること』 @masakoha523
もしあなたがアウトゲーム(UI)を つくることになったら with Unity
— Masataka Kohagura/ぴーすけ (@masakoha523) August 3, 2019
資料公開しました
あっ、追記ですけど、5月までは1人でUI実装して、6月,7月,8月に1人ずつ UI 実装人員は増えてますよ!https://t.co/q3VykkYoRR #unity_avengers
IRIAMというアプリを作っていました。今回はそれらの実体験も含めます。
そもそもアウトゲームって何?
大部分がUIで定義されていて、それを用いて何らかのアクションを起こすパート
これを作るとしたら何を考えるか そんな話をします
今回はuGUIの話ではなくコードをごりごり書く話をします
プロジェクト発足時にやっておきたいこと
・用語の統一
ポップアップ、モーダル、ダイアログなどはきちんと定義しておく
これがないとPrefabやクラス名に大きな影響がでてしまう
・コード規約の統一
・動作基準端末と動作対象端末の選定
・CanvasOrderの設定
UIは複数の画面が重なっていくことが多い、なので各UIのレイヤーを決めておきましょう。
もしレイヤーをさわる時、uGUIを使うアセットがある場合は注意しましょう
・デザインの話
フォント、ボタンの大きさ、マージン幅、色など
これらの認識を合わせておこう
UIの実装 複数人開発の効率化
MVP
IRIAMではMVPアーキテクチャを採用しました
どういうコードを書くのかという指針になります
MVPについてはこちらをみてね
共通パーツを作る
拡縮するボタン、ポップアップ機能
画面遷移基盤を作る
どこの画面も同じように実装できる
最初にやらないと、後にいろいろ独自実装が入ってきて切り離せなくなってしまう
たくさんの機能やオープンソースフレームワークを作った話
IRIAMで作った機能は3つあります
Clione
GitHub - MasaKoha/Clione: スマホゲームのアウトゲームので使用される、様々なパターンの画面遷移基盤
画面遷移のライブラリ
Icarus
ローカライズシステム
GitHub - MasaKoha/Icarus: ローカライズシステム
MVPScriptGenerator4Unity
GitHub - MasaKoha/MVPScriptGenerator4Unity: MVP Script Generator for Unity Editor
MVP派の方はぜひ使ってください
まとめ
アウトゲームは分量との闘い
複数人でつくるなら下地作りが大事です
#2 UnityのUIでやってはいけないこと
今回の資料ですhttps://t.co/15ouMygfrM #unity_avengers
— 椿 (@tsubaki_t1) August 3, 2019
unityはuiを簡単に使うことができますが自動で最適化はしてくれません
なのでやってはいけないことを知っておく必要があります
1.アンカーを使わずにUIを設置してはいけない
アスペクト比が異なる端末で崩れる可能性があります
意図的に中央に置きたいもの以外はアンカーを設定しましょう
驚くべきことに、アスペクト比が動的に変わる端末が出る可能性があります
今後端末ごとにアスペクト比が固定であるという概念はなくなる可能性もあります
ノッチがあるときどうするか
セーフゾーンを作って対応する
ただし、ノッチが右上にあったり、ノッチがなかったりするので
そういう時は頑張ってください
ビルドするとUIのサイズが変わってしまう
Canvas Scalerとかで想定サイズを設定しておきましょう
アスペクト比があっていればいいです
アンカーをちゃんと設定すればある程度の変化にも対応できます
2.特に注意せずマスクを設定してはいけない
マスクを使うとドローコールが増えるので
マスク済みの画像を用意することで抑えることができます
じゃあマスクは悪なのかというとそんなことはない
間隔や範囲を調整するといった工夫もできる
3.何も考えずにUIを動かしてはいけない
UIはたくさんあっても意外と安い、動かさなければほとんど負荷にはならない
ただしどれか一つでも動かすと負荷になる
これはCanvas内にあるUIの再構築に時間がかかるため(多ければ多いほど負荷が大きくなる)
おすすめの解決方法はTween系を使うこと
LayoutGroupの存在は忘れましょう
これの使用は避けてください
4.透明を何度も描画してはいけない
ポリゴンで抜くなどして描画範囲を減らすことができます ただしポリゴン数は増える
5.Textの影やアウトラインは使用してはいけない
見栄えがいいがポリゴンが増える(何も動いていない場合はそうでもないが)
TextMeshProを使いましょう
最近ダイナミックフォントも使えるようになりました
6.Atlasになんでもつっこんではいけない
同じタイミングで使うものだけAtlasにしましょう
7.SpriteDefaultを使ったSpriteRendererをAssetBundleにいれてはならない
自分でマテリアルを作って差し替えましょう
今回の話は信用せずにプロファイラーを信用しましょう
Unityのアップデートなどにより変わる可能性があるためです
LT1 『ちょっとしたUIの変更を楽にする手法』@tty_yamada
先ほどのLTの資料です。力技isPowerhttps://t.co/VhNFTWmdIa
— やまだ (@tty_yamada) August 3, 2019
#unity_avengers
話すこと
フォントを一括で変更する
UIの配置を再ビルドせず再配置する
フォントの一括変更
インスペクターからフォントをいちいち変えていられない
uGUI Textの場合エディタ外で名前を変えるだけで差し替えられます
TMPの場合、エディタ拡張でやりました
GitHub - ttyyamada/TMPFontReplacer: UnityのTextMeshProのフォントを一括で変換できるツールです
UIの位置をリビルドせずに変更したい
RemoteSettingsを使いました
ビルドせずパラメータの変更ができるサービスです
バグがあった場合の緊急対応や強制アップデートの仕組みを作ることができます
まとめ
フォントの置き換えは一括でできるとよい
RemoteSettingでリリース後のビルド対応を減らすことができる
LT2 『Presetでちょっぴり楽するUI組み立て』@lycoris102
本日のLTの資料です🙇♂️ #unity_avengers | Presetでちょっぴり楽するUI組み立て / Assemble the UI using Preset - Speaker Deck https://t.co/JnG9jaCVhz
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
これは今回のLTのために作ったタイトル画面です#unity_avengers pic.twitter.com/O4z3O914x7
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
今日はPresetのお話をします
Presetはコンポーネントの設定を保存することができる機能です
アセットの状態も保存でき、ProjectSettingも保存することができます
保存したPresetをデフォルト値として使うことができます
これを適応できるパターン
1.予期しない当たり判定の無効化
RaycastTargetをオフにしたPresetを使うことができます
これで毎回RaycastTargetをオフにする作業から解放されます
2.デザインガイドラインを作る
アプリ全体で統一感ができます
Presetを用意しておくといいでしょう
Prefabと違ってPresetは変更の追従ができないことに気を付けましょう
3.画像アセットのデフォルト値を設定できる
共通の設定をインポート時に適応することができます
Presetをぜひ活用してみてください
LT3 『ScrollViewアセットマスター』@azumagoro
本日の資料です(一部訂正)。
— アズマゴロー@UIエンジニアリング勉強会銀座(築地) (@azumagoro) August 3, 2019
ScrollViewアセットマスター#unity_avengershttps://t.co/krOARxhCf6
スクロールビューに関するお話
スクロールビューあるある
・データ数に合わせてセルの個数を変えたい
・スナップさせたい
・表示位置をジャンプさせたい
・複数種類のセルを使いたい
これらの解決策としてアセットストアでアセットを買うことが挙げられます
今回はそのアセットの紹介
UGUI Super ScrollView
とても機能が多い。格子状、ジャンプ機能もろもろ。
コガネブログさんでも解説記事があります
EnhancedScroller
ちょっと安い類似アセット
違いはこんな感じ
結論
EnhancedScrollerがいいのかも
懇親会
キタサァン・ランチ #unity_avengers pic.twitter.com/UvK0oOB2Ys
— キタ (@atasfrznnks) August 3, 2019
宴です#unity_avengers pic.twitter.com/XPYJnZQfBG
— アズマゴロー@UIエンジニアリング勉強会銀座(築地) (@azumagoro) August 3, 2019
ピザ懇親会や勉強会終わった後の喫茶店でUnityのコアなトーク聞けた。作ってるスマホゲーまで見てもらえてありがたや〜。#unity_avengers pic.twitter.com/ksxJ7OHdIV
— ひさしApp@Unityゲーム開発中 (@Hisashi_vc) August 3, 2019
タイムライン
8/3(土)UI勉強会は今週末開催です!
— アズマゴロー@UIエンジニアリング勉強会銀座(築地) (@azumagoro) July 29, 2019
本日24時で申込みを締め切ります!枠も残りわずかです、お早めにお申し込みください。
スピーチ
- UIに詳しいエンジニア@masakoha523さん
- 『テラシュールブログ』の中の人
LT
- やまださん@tty_yamada
- 青木ととさん@lycoris102https://t.co/uGLSs6LI5q
本日のNIFcLoungeではUnity UIエンジニアリング勉強会をホスティングしています。#unity_avengers #nifclounge https://t.co/6sIzv8pS5v
— 富士通クラウドテクノロジーズ株式会社 (@Fujitsu_FJCT) August 3, 2019
変数の定義、基本的にはMSのガイドラインに沿うと改めて用意する必要なくて結構楽で好み https://t.co/dPXeDMoq6W #unity_avengers
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
ミルフィーユ上にレイヤーが重なるのでレイヤーを決めておく。
— やまだ たいし@ソシャゲプログラマ (@OrotiYamatano) August 3, 2019
ミルフィーユ……。#unity_avengers
uGUIのアウトラインは上下左右にズラシた文字を利用してるのでポリゴン数がごりっと増える案件 #unity_avengers | 【Unity】TextMeshProのアウトラインは、uGUIのと比べてとても良い - テラシュールブログ https://t.co/7YjAZQ97b2
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
SpaceCatTシャツも買っていきましょう!https://t.co/tg9W8tFxXo#unity_avengers pic.twitter.com/i5YFX03KS8
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
(galaxy fold.....)#unity_avengers
— mao (@TEST_H_) August 3, 2019
Q.ノッチが上かも右かも下かもしれない端末が増えていく今後どうしたらいい?
— いも (@adarapata) August 3, 2019
A.がんばってください。
#unity_avengers
すべてを鵜呑みにせず、
— やまだ たいし@ソシャゲプログラマ (@OrotiYamatano) August 3, 2019
プロファイラーを信じろとのこと。
バージョンごとに挙動は違う。#unity_avengers
フォント差し替えはファイル名変更で対応。天才か #unity_avengers
— 鉄 (@tetsujp84) August 3, 2019
ProjectSettingsのPresetよさそう。(何かスマートな使い方考えていきたい)#unity_avengers
— mao (@TEST_H_) August 3, 2019
無限スクロールなんども作っては破棄してるし、決定版としてそのためだけでもAsset買うのもありか #unity_avengers
— やまだ (@tty_yamada) August 3, 2019
(ScrollViewのアセット、FancyScrollViewが好きです///) #unity_avengers | setchi/FancyScrollView: A scrollview component that can implement highly flexible animation. https://t.co/wQDepOJ0lY
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
いやー、すごい楽しかった
— ねずみ(stdmouse) (@stdmouse) August 3, 2019
UI周りの知らなかったこと勉強できたし、懇親会も気軽に話に入りやすい雰囲気で、色々聞けて良かった
結構人見知りで、不安だったけど、行ってよかった
次もあったら行きたいなぁ#unity_avengers
おまけ
今回椿さんに登壇いただきましたが、過去にTECH x GAME COLLEGEにて
UIの最適化に関するトークがありました。
こちらも併せてどうぞ。
ただし、今回椿さんが言っていた通り既に解決済みの内容もあることに注意。
本イベントの主催者であるアズマゴローさんは、
過去にUnityにおけるマネタイズの勉強会をとと様と開催していました。
今回もとと様がスタッフとして活動していました。
(許可いただいて勉強会お手伝いさせていただきました!でしゃばって申し訳ない……🙇♂️ 内容どれも楽しかったです!お疲れ様でした……!!) #unity_avengers
— 青木とと(ˊᗜˋ*) (@lycoris102) August 3, 2019
話すタイミングがありませんでしたが「デザインあ展」のシャツを着ていた!!!
他の方の感想ブログ
間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。