Google

2012年7月31日火曜日

Unityでコインゲー開発話:負荷実験

前回の話の続き。
今回はインスタンス管理システム作成までの話です。

普通、大抵のゲームは出現するオブジェクトが決まっており、仕様上で個数等がきっちり決まり、メモリマップまで作成可能になります。

弾丸等使い捨て的なものも例外ではありません。
Unityに最初から付いてくるAngryBotsというデモのプロジェクトを見てみましょう。
ヒエラルキーで見ると、プレイヤーが撃つ弾のオブジェクトは上限が決まっており、使い回しをしているのがわかります。


マウスで弾を撃ちつつ、ヒエラルキーを見てみましょう。
InstanceBulletプレハブが最初から6個あって、
有効無効切り替えしてるのがわかります。
しかし、メダルは弾より管理が困難です。
じゃあ管理しなかったらどれぐらいいけるのか?って事になり、まずは実機でテストしてみよう、という方向になりました。
その際に作ったのが以下のようなシロモノです。

■コイン負荷テストデモ版概要
・ステージ上にボックスコライダーを1個作成
・シリンダーをベースにしたコインを作成し、リジッドボディを付ける
・厳密ではないが、現在の生成枚数カウントをOnGUIで常に表示
・後はUpdateでひたすらコインをInstantiateしひたすら落下させる

さすがにデモの現物は出せないですけど、Unity知ってる人なら分かるでしょう。
注意点としてはUpdateで毎回生成すると、オブジェクト同士がコリジョンでぶつかってしまい、あらぬ方向に飛び散ることでした。
これを解決する策として、Vector3の生成ポイントをバラケ気味に複数準備し、生成箇所を順番にローテーションという簡単な方法で事足りました。


やった事のコア部分は上記のような感じです。(C#)
Vecotor3等がpublicになっているのはインスペクタに変数を表示して簡単に修正するためで、決して隠蔽を知らないわけではありませんw。
宣言時に[]にしておくと、配列の数と中身をインスペクタ上で管理できるので割りきって使うこともできます。

これを当時のiPhone3GS/4に入れ、何度も負荷実験しました。
しかしこの時にもう一つ、大事なことがあったのです。

「コインの落下速度をどうするか」

Unityの利点として重力シミュレーション機能があります。
負荷にも直結するこの話は、上記のデモとも無関係ではなかったのです。

長いのでこのへんにして続きます。

0 件のコメント:

コメントを投稿