今回はドラッグパネルのパフォーマンスに関するディスカッションから。
http://www.tasharen.com/forum/index.php?topic=1338
質問(常連メンバーAさん)
NGUIをしばらく使ってみてNGUI/Unityで悩んでいることがあって他の人も同様の
状況がないか教えてほしい。
1.Draggable PanelがiPhone4で遅い。iPad2, iPhone3, iPhone4Sは大丈夫。でもDraggable panelがひとつあるだけ、それもiPhone4だと遅い。それしかシーンにないのにパフォーマンスが激重。何か間違えた?でも実際問題、私が重く感じている。シェーダの問題?iPhone4のFillrateが悪いと聞いたことあるけど関係ある?
2.メニューをオブジェクト名、カメラ、パネル、アンカー等で作成してメニューを独自で作成する場合。質問はカメラのことで、たとえば「タイトルスクリーン」ってメニューをひとつのオブジェクトに格納したとして、カメラはひとつだけ使用したとする。もしゲームのメニューとチャットウィンドウに別アセットを容易したらパフォーマンスに悪影響出る?
カメラを3つか4つあると確実にパフォーマンスが激重になる?だとしたらUnityの仕組みがよく分からないし、もし複数カメラがあった場合、それぞれ別のコールが行われて、Draw Callを余分にコールするのとどんな違いがあるのか。
(とくにカメラが別レイヤーでレンダリングされてるのであれば)
3.UIDraggablePanel
ドラッグパネルのリストにて使用オブジェクトが1000あるけど画面表示されるのが10個の場合、1000オブジェクトをあらかじめ生成するのと動的に生成するのとどちらがよいのか?iphone 4でUIDraggablePanelパフォーマンスが落ちる点と連動して関係あるのかなと考えているのですが。
コメント(初心者Bさん)
んー、UI Root配下にひとつのレイヤーでひとつのカメラがベストじゃなかったかな?あと画面外に大量の非表示オブジェクトがあっても配置(geometry)が変わらないならパフォーマンスに何の影響もないんじゃないかな?(パネル全体を動かすのは配置変更に当たらないとおもっているし)
ただ、動的に生成するのがパフォーマンスに悪影響は作者さんに回答おまかせですー。
回答
Draggable Panelは正しく設定することで十分なパフォーマンスを発揮するので、実際にデモのパフォーマンスを見てほしい。その時にパネルの中のものをドラッグするときには配置情報を更新し直す必要あるのでパフォーマンスは当然に落ちる。パネルそのものあるいはUIDraggablePanelのドラッグは実際には何も動かす必要ないためレスポンス早い。
パフォーマンスをさらに早めるにはstaticにすることでウィジェットの大きさ、色、位置が変わらない。これは無駄なチェックを外すのでパフォーマンスが向上する。
賢くやるなら、デフォルトでstaticにしておいて、パネル変更が必要なときにstaticeを外す方法がある(ボタンクリックの時に外す、等)。次のフレームでまた元に戻せば良い。
あと複数カメラはひとつのカメラより確実にリソース消費する。私自身が作成してるWinwardでもカメラはひとつであり、その下に必要なウィンドウがアンカー付でたくさんついている(必要なときまで無効化)。
追加質問(常連メンバーAさん)
Bさんの指摘は認識している。確かにUIPanelは別の配置(geometry)を必要としておりDrawCallを余分に消費するので、複数のUI Panelをさらにパネルのなかに入れ込むことは遅くなる要因だ。自分の場合にはUIDraggablePanelではNGUIデモと同じ設定にしてて、パネルだけ動かしてオブジェクトは動かしていない。
ところで、UIPanelをネストしてUIPanelの中にあり、かつ片方がstaticで片方がstaticでない場合は結局static扱いになるのだろうか?
たぶん親が優先されると考えているのかな?自分のプロジェクトでパフォーマンス低下の要因として説明つくのはUIPanelにあるDraggablePanelしか考えられず、ただ二つ目のUIPanelはドラッグ可能であるにも関わらず一つ目をドラッグ不可能としていることである。
追加回答
ネストされたパネルはすべて別エンティティとして扱われる。staticも子が優先され(親から子への)継承は行われない。
----
パフォーマンスに関する議論はケースバイケースだと認識している。ただし、色々なケースにおいて実際の利点・欠点の情報が共有されることで、個々のプロジェクトについて正しい判断が出来るものだ。Unityは日本でも勉強会やセミナーが活発なので、そういった所で議論されたうえでさらに情報の公開が進むことを強く望む。
もっと活発な議論をしようぜ! NGUI!
Unity3Dの公式マニュアル翻訳やってる人がiPhone, Androidでのゲームアプリ開発について記事にしています。Unity3Dでの開発をメインにAsset Storeで入手できるNGUI, Playmakerや, Oculus Riftなど作者サイトからの英語情報を翻訳していきます
登録:
コメントの投稿 (Atom)
自己紹介
- gamesonytablet
- Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます
ページビューの合計
ゲーム開発記事の目次
過去7日間の人気投稿
-
Unity使っててプロジェクトをインポートするときなどに稀に Missing (Mono Script) などと表示されていることがある。 慣れている方なら「仕方ないな」といって手動で正しいスクリプト見つけて修正していくのだが、これをエディタ上で自動的に修正してくれるパッケー...
-
今回は Unify Community で紹介されている Tips からカレントディレクトリの変更に関する Tips を紹介したい: http://wiki.unity3d.com/index.php/Tip_of_the_day Feb 2013 Tip #5...
-
前回記事に引き続いてCharacter Controllerの正しい使い方についてUnity Gemsからの翻訳を投稿する: ------- http://unitygems.com/mistakes1/ October 15, 2012 Character ...
ブログ アーカイブ
-
▼
2012
(141)
-
▼
8月
(50)
- PlaymakerでOSイベントに対応
- NGUI Flashビルドのメモリリーク
- NGUI 2.1.6
- ちょっと休憩~Unity Editorを日本語にしてみる実験
- Unityプログラミング応用(グラフ作成) ~その3
- Unityプログラミング応用(グラフ作成) ~その2
- Unityプログラミング応用(グラフ作成) ~その1
- NGUI Unity4の新フォントシステムに対応できる?
- Unityシェーダについて考える ~その2
- Unityシェーダについて考える ~その1
- セーブ機能を実現するAsset
- NGUI 2.1.5 - Unity4ベータ対応
- Unityプログラミング基礎(時計の作成) ~その2
- XNAゲームのUnity3D移行
- Unityプログラミング基礎(時計の作成) ~その1
- NGUI UIの配置変更と注意事項
- UnityとBlenderでアニメーションの切り分けは?
- NGUI 2.0.2
- 新しいiPadの解像度とゲーム開発
- Blender アニメーションの作業時間短縮
- 街全体をBlenderで作成する
- NGUI 2.00
- NGUI 2.0.1
- NGUI 2.0.3
- NGUI 2.0.4
- NGUI ドラッグパネルのパフォーマンス
- タイトルを目立たせるBlenderカメラテクニック
- NGUI 背景をボヤかすテクニック
- iTween 複数動作を簡単実現
- NGUI 2.1.4
- NGUI TweenのBounce使える?
- NGUI 2.0.5
- NGUI パーティクルでも活用すべき?
- FingerGestures 50%セール
- NGUI Unity4.0での動作状況
- NGUI作者にメールしてみた
- NGUI:複数デバイス解像度対応
- Playmaker入門ビデオについて
- NGUI ちょっと息抜き:「天才作者」について(続編)
- NGUI 2.0.9
- NGUI 2.0.7
- NGUI 2.0.8
- NGUI 2.0.6
- PlaymakerでiPhoneスワイプにてゲームを動かす
- NGUI 2.1.3
- NGUI ちょっと一息:「天才作者」インディーズゲームの未来は?
- NGUI 攻撃ダメージ表示の作成
- NGUI ちょっと息抜き:「天才作者」の販売方針
- Unity Asset Storeゲームサンプルのダウンロード
- NGUI iPhoneビルドでのパフォーマンス改善
-
▼
8月
(50)
0 件のコメント:
コメントを投稿