2012年03月26日

[Unity] NGUIの画像SpriteでDrawCallに効果が出るか試してみた

Unityで画像を表示する方法に、

(1) スクリプトを使ってOnGUI()内で表示する
(2) NGUIを使って表示する

を行ってきましたが、DrawCallを抑えるとしたらNGUIが有効という話をよく聞きます。
今回は、以前の記事で使ったプロジェクトを利用して上記(1)(2)を検証してみようと思います。

まずは(1)です。
Sprite用の画像をマーク毎に切り取って(128x128)、それぞれをGUI.Label()で表示します。

↓Skinの使い方についての記事
[Unity] GUI Skin を使って画像を切替える
http://blog.be-style.jpn.com/article/54522582.html

■補足
Skin内の各Styleの名前は以下の通り。各Styleのnormal要素に切り取った画像を適用しています。
丸 = circle
四角 = square
三角 = triangle
星 = star

使ったスクリプト
---------------------------------------------
#pragma strict
var customSkin : GUISkin;
function OnGUI() {
// GUISkinをセットアップ
if (customSkin) {
GUI.skin = customSkin;
}
GUI.Label(Rect( 20, 20, 128, 128), "", "circle");
GUI.Label(Rect(140, 20, 128, 128), "", "square");
GUI.Label(Rect( 20, 150, 128, 128), "", "triangle");
GUI.Label(Rect(140, 150, 128, 128), "", "star");
GUI.Label(Rect( 20, 280, 128, 128), "", "circle");
GUI.Label(Rect(140, 280, 128, 128), "", "square");
GUI.Label(Rect( 20, 410, 128, 128), "", "triangle");
GUI.Label(Rect(140, 410, 128, 128), "", "star");
}
---------------------------------------------
結果↓

20120326ngui_drawcall01.png

DrawCall = 8 でした。

次に、(2)です。
以下の記事で作っておいたUISprite(circle,square,star,triangle)を(1)に合わせて配置。

[Unity] NGUIでSprite画像を使って複数のマークを表示してみた
http://blog.be-style.jpn.com/article/54633023.html

結果↓

20120326ngui_drawcall02.png

DrawCall = 2 でした。

■結果
OnGUI()内で画像描画 = DrawCall 8
NGUIで画像描画 = DrawCall 2

描画する画像が増えれば、この差はさらに開きそうです。
iPhoneアプリの快適動作の目安は「DrawCall 20以下」と言われているので
DrawCallを抑えたいときはNGUIが有効そうです。

ただ、NGUIはOnGUIでの描画よりも制御することが大変そうです。
OnGUI内だったらスクリプトで簡単に実現できる事(画像の切替え、ラベルの書換え等)が
NGUIでは手間がかかります。
まだNGUIを使いこなせていない事が一番の原因ですが orz

NGUIをもっと使い込んで、快適なFPSを目指そう。
posted by be-style at 22:01| Comment(0) | Unity
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]