Version: 2018.4
グラフィックスメソッド
レンダリングの最適化

スクリプトとゲームプレイ方法

このセクションでは、モバイルの開発者が、速く実行されるようにコードを書き、ゲームを構築する方法を示しています。ここでコアとなるアイデアは、実際にはゲームデザインと最適化は、独立したプロセスではなく、ゲームを設計しているとき、あなたがする決定次第で、楽しさと高速な作業の両方を得ることができます。

歴史的な例

昔のゲームでは、画面上に一度に表示できる弾数が一発だけで、リロード時間はタイマーではなく、弾が当ったかどうかで変化するようなものが有りました。このテクニックは、object pooling と呼ばれ、メモリ管理を簡素化し、プログラムがより滑らかに実行されるようになります。

スペースインベーダーの作者が使える RAM 領域は少量でした。そして彼らは、プログラムが利用可能なメモリ領域を絶対に超えないようにする必要がありました。もしもプレイヤーが一秒毎に弾を撃てるようにして、パワーアップによってリロード時間が半分に短縮されるようにすると、プレーヤーが連射した時には、大量の弾が長時間画面上に表示される事になり、それらを割り当てるための十分なメモリ空間を確保しなければなりません。これはおそらく問題を引き起こすので、その代わりに、彼らは 1 発だけ発射できるようにしたのです。弾が消滅した瞬間、単純に非アクティブ化して、再び発射できるように再配置してアクティブ化します。これなら常に同じメモリ空間上に配置しておくだけでよく、移動させたり、絶えず削除して再作成する必要もありません。

最適化をとるか、ゲームプレイを磨き上げるか

これは全くリアルではありませんが、非常に楽しい瞬間です。ストレスは、インベーダーが地表に接近してくるクライマックスの瞬間、まるで映画や小説のクライマックスのような、この瞬間に解放されます。インベーダーが接近すると、プレイヤーのリロード時間はほとんど無くなり、完璧なタイミングで連射することで、まるで奇跡のように地球を防衛する事ができます。よいゲーム・デザインは、インタラクションによる物語性と、そのすべてを動かす背景技術とのバランスによって生まれるのです。コード・ロジスティックスとユーザーのインタラクションをそれぞれ突き詰めようとすると、様々な面で相容れない事が有るため、何か新しくて面白いものを作ろうと思ったら、数多くの試行錯誤が必要になります。そのため、インベーダーのように面白さが効果的に詰め込まれた素晴らしいものを計画するのは、かなり難しいでしょう。

おそらく、インタラクションと、モバイルハードウェアに最良なゲームプレイ双方を、ゲーム全体にわたって同時に計画することはできません。実験の最中に 2 つが調和して、偶然“逸品”が生まれることはありそうです。ですが、あなたが配信する予定のハードウェアでコードを確実に動かすための知識を持つことは、開発の手助けになるでしょう。オブジェクトプーリングが優れている理由について詳細な技術的説明を参照したい、そして、メモリの割り当てについて学びたいのであれば、私たちの スクリプトの最適化ページを参照してください。

モバイル上で十分な実行速度は出るか

あなたがゲーム製作を始めているとしましょう、アクションや何か派手なものを一度にたくさん出すことで、プレーヤーの心をとらえたいとします。どうしたら実現できるでしょう?コインは何枚あるのか、ゾンビは何体いるのか、敵車は何台かなど、ゲームの要件と限界はわかっていますか?これらは、すべてコードの書き方次第です。

通常、もっとも一般的で汎用性の高い方法や、または楽な方法でゲームのコードを書くと、割とすぐにパフォーマンスの問題に陥ります。ゲームを実行する事に特化した構造や、トリックをより多く用いる事で、限界はより拡大し、スクリーン上により多くのものを表示することができるようになります。

簡単で汎用性が高いが遅い

2D のゲームで 2 次元に限定されるリジッドボディ 発射体のリジッドボディ * インスタンス化とデストロイを多く使う。 * 収集品やキャラクターのための多くの個々の 3D オブジェクト * フレームの毎の演算実行。 * あなたの GUI や HUD のために OnGUI の使用

複雑で制限されるが、より速く

  • 2D のゲーム用に独自の物理コードを書く。 *発射体自身のための衝突検出の処理。
  • インスタンス化とデストロイの代わりにオブジェクトプーリングを使用。
  • 単純なオブジェクトを表すために、粒子上にアニメーションのスプライトを使用。
  • いくつかのフレームごとに高等な計算を実行し、結果をキャッシュする。
  • カスタム GUI ソリューション。

参考例

回転、ダイナミックに点灯し、まとまった何百ものコインを一度に画面上に表示

  • 悪い例:各コインがリッジボディで、それを回転させ、それを拾うスクリプトと独立したオブジェクト。
  • よい例: コインは、アニメのテクスチャとパーティクルシステムであり、1 つのスクリプトが、すべてのコインのための衝突テストを行い、ライトからの距離に応じて自分の色を設定しています。
    • この例は、スクリプトの最適化のページに実装しています。

あなたのカスタムビルドソフトボディシミュレーション

  • 悪い例 :世界はどこにでも転がっている枕をもっており、これを使用して、周りに投げつけ、枕の山を作ることができます。
  • よい例 :あなたのキャラクターは枕で、それらのひとつのみが存在し、状況はいくらか予測可能です(球と軸がそろった立方体と衝突するだけです)。おそらく、完全な機能を備えたソフトボディシミュレーションではない何かをコーディングすることはでき、本当に印象的に見えて、高速に実行します。

30 体の敵キャラクターが、同時にプレーヤーを撃つ

  • 悪い例:敵キャラそれぞれが個別のスキンメッシュ、分離された武器オブジェクトを持っていて、発砲するたびにリジッドボディベースの発射体をインスタンス化します。敵キャラ全員が、フレーム毎に実行される複雑な AI スクリプトで、同胞全員の状態を考慮しています。
  • よい例:敵のほとんどが遠く離れていて 1つのスプライトで表現されるか、2D で 2つくらいのスプライトで表現されます。すべての敵の弾は、基本的な物理にのっとったスクリプトによって同じパーティクルシステムによってシミュレートされ描画されます。各敵はそのセクターの他の敵の状態に応じて、1秒につき 2回、AI 状態を更新します。

スクリプトの最適化の方法とその理由

スクリプトの最適化ページを参照してください。

グラフィックスメソッド
レンダリングの最適化