2015年11月9日月曜日

Little Umbby 開発日誌 #2

Little UmbbyはiOS向けゲームとして、UE4で鋭意製作中です。

LittleUmbby_Play1.jpg

先日、効果音&BGMの組み込みを始め、サウンドに関しては70〜80%ぐらいまで進んだ感じです。音が入ると俄然、楽しくなってきますね。

まだ、ゲームルール&バランスの調整、グラフィックの変更などもやっています。あと、仮のタイトル画面も作って、そこからゲームを起動するテストも行いました。

今日は、UE4でiOS用のゲームを作っている時の悩ましい問題点について、つらつらと書いてみたいと思います。


尚、以下は全てWindows版UE4.9.2で開発している時点での状況です。

1.ガベージコレクション(Garbage Collection)問題

ちなみに"UE4 GC"というワードで検索すると、Game Center周りの問題がヒットしてしまうので、ちゃんとGarbage Collectionと検索した方が良いです。

Garbage Collection(以下、ガベコレ)に関しては何度か書いてますが、モバイルデバイス上では瞬間的に画面が止まるので、アクションゲームなどではとてもつらい状況となります。

対策としては、Actor、パーティクルなどを使いまわして、新規生成&解放をなるべく行わないようにするという事が考えられます。しかし、Blueprint上でArrayを使用する場合も多く、それらの生成&解放を考えると、まったくガベコレを引き起こさないようにすることは難しいと思います。また、Actorの再利用を行うルーチンを作成する手間もありますし、案外、そういったところはバグが入り込みやすいので(実際、Little Umbbyでも原因究明できてないバグが…)、本来的なゲーム作りに集中し辛いです。

この辺りをサポートしてくれる何らかのシステムが組み込まれれば本当に助かるのになぁと思いました。しかし、パフォーマンスに関しては、年々モバイルデバイスの性能も上がっているので(iPhone 6sのA9チップはどうなんでしょう?)、あまり問題にならなくなる将来が来るのかもしれませんが…。

ガベコレに関してはプロジェクトセッティングで、パフォーマンスを調整できるようですが、詳しいドキュメントが見つけられなかったので、いまいち、その使い方に自信が持てません。
現在のところ以下の様な感じに、僕は設定しています。

GCSetting.jpg

まず、ガベコレが起こるサイクル時間の設定(Time Between Purging Pending Kill Objects)ですが、デフォルトでは60秒になっているので、これを3600秒に設定し直しています。もっと大きい値でもいいと思っています。それというのも、iOS上だとシステムのメモリが少なくなると、iOSからワーニングの通知がアプリケーション側に届きますが、どうも挙動を見ていると、このメモリワーニング時にガベコレが発生するようになっているみたいなのです。要はメモリが足りなくなれば、ガベコレが発生するという事なので、もうそれまでは好きなだけメモリを使ってくれよ、しかしそれまではガベコレを発生させないでくれよという戦略です。

次にバッファメモリ(Size Of Permanent Object Pool)ですが、ドキュメントが無かったので、詳しい使い方&アルゴリズムが分からないのですが、このバッファが使用済みメモリで一杯になるまではガベコレに影響を与えないようにするものかなと推測しています。
なので、このバッファを10Mバイトに設定してやりましたが、ものの見事にアプリケーション起動時に落ちました。まあ、これはiPhone側のその時の空きメモリの状況に依るところがありますが、しかし、大抵はバックグラウンドに移行しているだけのアプリが多い状況で、空きメモリが少なくなっている場合が多いと思うので、楽観はできません。
なので、かなり少なめに見積もって、現在のところ1Mバイトに設定しています。これによって、僕はガベコレの頻度が気持ち少なくなったと思ってますが、単なるプラシーボ効果かもしれません。

2.Control ScreensaverがOFFにならないバグ

ControllScreensaver.jpg

Control Screensaverノードは、アプリケーション起動中にプレイヤーが操作していない状態が一定時間続いた時に、モバイルデバイスの画面をスリープするかしないかを設定できます。

但し、UE4.9.2時点では、この機能がバグっていて、OFFにしていてもスリープしてしまいます。自分が調べた限りでは、iOSの設定の「自動ロック」をONにしていると、そちらが優先されてしまうようでした。

autolock.jpg

同バグに関しては、以下からも状況を伺えます。

Little Umbbyではゲーム中は画面をタッチしないでプレイできるようになっているので、これは、かなり大きい問題です。
UE4.10で解決しているのかチェックできてないですが、もしまだなら、10分もあればバグ修正できそうな問題なんで、ぜひ早いところ直して頂きたいです。ぜひ!

3.スリープ&ロック時にアプリ強制終了問題

アプリケーション実行中(メインタスクとなっている状態)にオートスリープ→ロック状態になって、しばらくしてからロックを解除すると、アプリケーションが強制終了している問題です。

これだとゲーム中に寝落ちしたり、一息つくためにiPhoneを机に置いている間に、スリープ→ロック→アプリ強制終了してしまうことが多々発生し、せっかく途中までプレイした内容が消えてしまうことも考えられます。

ちなみに、プレイヤーがホームボタンを押して、アプリケーションをバックグラウンドに移行させた場合は、強制終了させられることはありませんでした。iOSの空きメモリが足りている状態ではアプリが強制終了させられることも無いので、再度、アプリのアイコンをタップすれば、前の状態に復帰できました。


以上、問題点を書き連ねました。何かの参考になれば幸いです。

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...