UnityでのPSVita開発
普段Android端末でチェインクロニクルをやっているのですが、
PSVita版もやってみようと思い遊んで見ました。
チェインクロニクル◆本格シナリオRPG/チェンクロ - Google Play の Android アプリ
が、時々カクカクして不規則にフレームレートが落ちてる?
と感じたのがきっかけです。
チェインクロニクルはUnityで開発されており、
1つのソースからAndroidもiPhoneも、そしてVitaへも書き出せます。
なぜ、Vita版だけカクカクするんだろう?ガベージコレクション(GC)でも走ってるのかしら?
ということで実際に1ソースからAndroid,Vitaに書き出して調べてみました。
なおAndroidの端末はASUS製のZenfone5、2014秋に発売の中くらいの性能です。
まず2Dスプライトの描写でベンチマーク
Androidでは、1500個だと約19fps、2500個だと約11fps、3500個だと約7fps
Vitaでは、1500個だと約20fps、2500個だと約12fps、3500個だと約8fps
ほとんど両者変わらず、
というかVitaは3年前に販売されたものなのにこれだけの性能が出るのはさすがゲーム機だな、と感じました。
次にGCのテストです。
以下のように毎フレーム、無駄にメモリを消費させ、GCを働かせました。
Countの数を多くして負荷を徐々に上げました。
string box = "";
for (int i = 0; i < Count; i++) box += "a";
System.GC.Collect();
Androidでは、1500で28fps、2500で11fps
Vitaでは、1500で3fps、2500で3fps
あー、やっぱりボトルネックはGCか。
確かに、ゲーム機のメモリ管理は伝統的に開発者がするものだし、
ゲーム機側ではあんまりうまくGCしてくれないんだろうな、というのは推測できました。
昔のAndroid、特に1.xの時もゲーム中にGC走ると、フレームレートすごく落ちたし、
最近のスマホOSはすごくうまくGCしてるんだなあ、と思いました。
このように、ちょっと実験してみて、
Unityで開発したAndroid, iPhoneアプリを
Vitaに移植するのは、特にリアルタイム系のゲームでは一筋縄ではいかないんだろうなあ、
と感じました。