More Related Content
Similar to 【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編- (20)
More from Unity Technologies Japan K.K. (20)
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
- 20. Unity Profilerについて
• Editor上でプレイした時に、CPU / GPU / Rendering / Memory / Audio /
Physics / uNet / Video Player / UI / GIなどの状況を確認できる
• Editor上でのプレイだけでなく、Android/iPhone上での実行のパフォーマ
ンスも見られる
※Video Playerは Unity 5.6から利用可能
UIは Unity 2017.1から利用可能
GI(Global Illumination)は Unity 2017.2から利用可能
- 38. C#メモリとUnityメモリについて
• C# メモリ
• C# スクリプト側で使用しているメモリで、Garbage Collectionされる
• 一度メモリをReserve(予約)してから使う。C#用に予約済みとなったメ
モリはアプリ終了まで二度と返されない
• Unityメモリ
• Texture, Mesh, Animation などのアセットのデータで主に占められるメ
モリ
- 75. string name = “player”;
dialogTitle.text = “名前は” + name + “ですか?” + “¥n”;
string処理の扱いについて
一時的に生成されるstring
名前はplayer
“名前は”とnameを結合し、
一時的に結果を保存するた
め、stringを生成
- 77. string処理の扱いについて
string name = “player”;
dialogTitle.text = “名前は” + name + “ですか?” + “¥n”;
一時的に生成されるstring
名前はplayer
名前はplayerですか?
最後に改行文字を足した文字列を
dialogTitle.textに追加して処理が完
了
- 78. string処理の扱いについて
string name = “player”;
dialogTitle.text = “名前は” + name + “ですか?” + “¥n”;
一時的に生成されるstring
名前はplayer
名前はplayerですか?
一時的に生成されたが
ゴミとしてメモリ内に溜まる
(GCのタイミングで完全に処理され
る)
- 82. StringBuilder sb = new StringBuilder(32);
string name = “player”;
dialogTitle.text = sb.Append(“名前は” )
.Append( name )
.Append( “ですか?” )
.Append( “¥n” ).ToString();
正しい string処理
string用のBuffer(32文字分確保)
名前は
バッファーに
”名前は”を追加
- 101. Physicsが重いデモ
Physicsが重い場合、Edit → Project Settings → Time のFixedTimestep設定を
見直す。
Physicsは、通常のゲームループとは違う周期(フレームレート)で動い
ている。デフォルトでは 50FPS( 0.02 )となっているので、30FPSで動
いているゲームの場合、Physicsも30FPSになるように「0.03333」を指
定すると良い
- 108. ざっくりと原因と対策
• C#スクリプト
• 原因&対策:ゲームによって色々
• 物理処理
• 原因:余計な衝突判定を行っている
• 対策: Layer Collision Matrix を見直す
• 原因:複雑な衝突判定を行っている
• 対策:MeshColliderは重いので、BoxCollider等で置き換える
• 原因:1フレームに複数回Physics処理が回っている
• 対策:TimeのFixedTimeStep設定を見直す
- 136. 結果保存のためのツール・手順紹介
• Unity 5.6以降で有効なエディター拡張
• 300フレーム毎に、SaveをするためのEditor拡張を作成
• https://github.com/wotakuro/UnityProfilerIntervalSave
• Unity5.5以前でも有効な方法
• Android/iOS端末上でログファイルを書き出すようにして、実行後にPC
へ転送、解析を行う手法
• https://github.com/wotakuro/ProfilerBinarylogSplit
- 142. こんな使い方も…
void LoadAssetBunlde( string name){
Profiler.BeginSample(“AssetBundle読み込み ” + name);
// nameで指定されたAssetBundleを読み込む処理
……
Profiler.EndSample();
}
好きな名前を指定できるので、読み込もうとしている
AssetBundle名を入れることで、AssetBundle毎の
読み込み時間がわかる
- 145. 各プラットフォーム毎に用意された
GPU Profilerを使う
• iOS
• XcodeのOpenGLES Frame Debugger
• Android
• チップメーカー毎に違う
• Mali -> Mali Graphics Debugger
• Snapdragon -> Snapdragon Profiler
• Tegra -> Tegra Graphics Debugger
• Windows上のEditor
• Render Doc