コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】「[Unite Japan 2013]LWF in real life: どうぶつフレンズの開発事例」感想

[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 );
    }
}