[Unite Japan 2013]LWF in real life: どうぶつフレンズの開発事例 from Unity Technologies Japan G.K. on Vimeo.
今更ながら昨年のUniteの動画を見たので感想を書き残しておきます。
LWF in real life: どうぶつフレンズの開発事例
Unity Profilerなしでデバッグしたい時
1.Time.deltaTimeを使ってシンプルなFPSカウンターを作る
2.Unityオブジェクトの数を調べる
※重いので2秒ごとにスナップショットする
objects = FindObjectsOfType( typeof( UnityEngine.Object ) );
3.ヒープの使用量をネイティブの機能で取得する
#if !UNITY_EDITOR && UNITY_ANDROID [DllImport( "mono" )] #else [DllImport( "__Internal" )] #endif static private extern long mono_gc_get_used_size();
4.Xcode instrumentsを使う
メモリ使用量が見やすい
5.デバイスで手動でGCとUnityのアセットのアンロードを使用できるように
OnGUIボタンで設定する
6.adbはシンプルで役に立つ
Pss(Proportional set size)の値が大きいと強制終了する可能性がある
adb shell dumpsys meminfo '..animal'
7.UnityEngine.Object以外のオブジェクトの数の調べ方
#if ENABLE_PROFILER public static int sNumObjects; public Model() { sNumObjects++; } ~Model() { sNumObjects--; } #endif
念のため使い終わった時にNULLを代入する
void OnBecameVisible(){ enabled = true; } void OnBecameInvVisible(){ enabled = false; }
40匹の間は25匹だけアニメーションさせている
8.バッテリーも大事
インタラクションしている時は60FPS
インタラクションしていない時は30FPS
9.カメラを引いた状態で見えるオブジェクトの数が増える
Draw Callsも増える
デバイスによって最大数が違う
デバイスによって制限をかける
if( Camera.mainCamera.orthographicSize > MAP_MAX_ORTHOGRAPHIC_SIZE ) { return; }
シンプルなシーンでもなかなか動かない
カメラのレンダーがネックになっている時はフィルレートの問題
10.バックバッファのサイズを自作する
if( Screen.dpi > 260 ) { if( isAdreno20x() ) { SCREEN_DOWNSCALE = 0.8f; VIRTUAL_WIDTH = ( int )( Screen.width * SCREEN_DOWNSCALE ); VIRTUAL_HEIGHT = ( int )( Screen.height * SCREEN_DOWNSCALE ); Screen.SetResolution( VIRTUAL_WIDTH, VIRTUAL_HEIGHT, true ); } }