まべ☆てっくvol.3 Unityのお道具箱 に参加しました
- 概要
- うちではこうやってます!UI構築ルールとPlaymakerを使った画面遷移
- Unityパッケージ管理について本気出して考えてみた
- モバイル向けAnimation/AnimatorのTIPS
- LTメモ
概要
- 参加しました(ˊ꒳ˋ*)
- 株式会社マーベラスさん主催の勉強会です!
- 会社独自でやってる取り組みや仕組みオープンにしてくださるのとても嬉しい…!!
うちではこうやってます!UI構築ルールとPlaymakerを使った画面遷移
資料
www.slideshare.net
目的
- 人数増加を見越して悩まずに画面/機能を量産可能な仕組みである
- 導入時にルールが少なく説明しやすい
- 実装時に他の実装から真似でき、担当者が入れ替わってもパッと分かる
Playmaker + uGUI を使用した画面遷移
- Playmaker
- 有名なビジュアルスクリプティングアセット
- ページ構成
- Scene入れ替え方式
- ただし1つのSceneに対し1つのGameObjectのみを配置
- HomeSequenceというGameObjectにてステート管理を行う
- PlaymakerFSM + シーケンスマネージャ
- Playmakerを使ったステート管理
- グラフィカルなステートマシンとして利用
- ステートの配色でグルーピングを行う等工夫
- Playmaker上で使用するアクションは基本CallMethodのみ
- グラフィカルなステートマシンとして利用
- 各ステートで行うこと
- シーケンスマネージャに用意したメソッドをCallMethodで呼ぶ
- UIPrefabのInstantiateや状態管理など
- UIPrefab
- UI要素はPrefabに格納した状態で用意する
- UIHome / UIMenu / UIHeader … etc
- 画面内で発火したイベントの処理について
- 子から親にイベントを伝搬し、その結果から子に指示/
作業フロー
- 仕様書: 企画
- 仕様確認: 全員
- UIPrefabの作成: デザイナ
- UIPrefab作成用のシーンを用意し、解像度などの設定をCanvasに適応しておく
- UIPrefab修正 : エンジニア
- スクリプト開発: エンジニア
- FSM開発: エンジニア
Unityパッケージ管理について本気出して考えてみた
導入
- 新規プロジェクトを作る際に自作のライブラリ入れる
- でもUniRxとTexturePackImporterに依存してるぞ
- AssetStoreからダウンロードマネージャ開いて … めんどい!!!!!
- 依存関係を解消してくるライブラリ作ってるよ
upm
- npmを使用したパッケージ管理ツール
- 依存管理の仕組みはnpmに乗っかる
- イベントシステムはUnity向けにカスタマイズ
- 事前準備
- アセット群を npm publish する
- プライベートなリポジトリ(レジストリ)で管理する
- npm Enterprise
- Vardaccio
- 実行
- npm i -S ${name-of-package} でインストールしつつpackage.jsonの生成
モバイル向けAnimation/AnimatorのTIPS
UnityTechnologyJapan 山村さん ( テラシュールブログ の 椿さん )
Mecanimについて
- Mecanim (以下の機能の総称)
- Animator
- AnimationController
- AnimationClip
- 細かくできること
Animatorに関するTips
- ステートマシンを整理する
- MecanimはGUIで1キャラクターを作り込めるが複雑になりがち
- サブステートマシンでまとめる
- 注意: Exitに出た時に次のステートが存在しない場合、最初のステートに戻ってしまう
- 明示的に任意のステートに割り振らなきゃいけない
- ブレンドツリー使う
- 日本のゲームの場合、色々なキャラがいる
- 1体のキャラを作り込むのではなく、モーションを微調整する
- AnimationControllerが大量にできてしまう
- 理想はAnimationControllerを汎用的に使い回すこと
- リグを合わせる
- Humanoid: HUmanoid同士ならアニメーションは共有可能
- Generic: ボーン構造が一致すれば使える
- リグを合わせる
- 基本となるAnimationContollerを作り込む
- AnimationOverrideContollerでアニメーションを上書き
- 注意: 構造が異なるステートマシンがあると問題になる
- 余裕を持ったアニメーションコントローラーを作る
- PlayableAPI を使う
- ダイナミックにAnimationClipを実行する
- AnimationControllerのブレンドもできる
- Unity5.6で変更入ったので注意
パフォーマンスの話 / モバイル向けのあれこれ
- モバイルには色々制約がある
- ApplyRootMotionを使用しない
- 無駄なCPUを結構使う
- AnimationContoller内で合成するLayerを減らす
- Transion を増やしすぎない
- PlayやFadeで代替する
- AnimatorのついたGameObjectを非アクティブにしない
- Animatorが持つメモリやStateMachine等を破棄する
- 再度有効にした時に再構築される
- Animatorコンポーネントをdisabledにする
- Animatorが持つメモリやStateMachine等を破棄する
- 見えないアニメーションは再生しない
- AnimatorのCullingModeを変更する
- CameraのOcculusionCullingでもOK
- そもそもSkinnedMeshRendererを減らす
- qualityもできれば減らす
- Animationのキーフレームを減らす
- Keyframe Reductionを有効にする
- OptimizeGameObjectを使用する
- Unityに配置したモデルをアニメーション向けに最適化する - テラシュールブログ
- GameObjectの数が減って起動が早くなる
- SkinnedMeshのコストが減る
- Unityに配置したモデルをアニメーション向けに最適化する - テラシュールブログ
- AssetBundleでAnimationをUnloadしないで使い回す
LTメモ
Hot Reloading on Unity Editor
資料: Hot Readloading on Unity Editor
技術書展へのお誘い
Unityで『ニーア オートマタ』の義体システムっぽい機能を作る
- UnityとNCMBで作る話