プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

ゲーム開発をスピードアップする

スクリプト言語による効率的ゲーム開発 2章

30回の微修正を25分で行う方法

前章では30回の微修正に1時間25分かかるという例を挙げた。
しかし、そのうち頭を使う必要があるのはコーディングと修正部分の確認だけである。

微修正をコーディングと確認だけで済ませられれば1時間25分がわずか25分で済む。
そこで、ゲームを動かしたままコードを修正できるようにする方法を考える。

ロジックとデータの分離

プログラムはロジックとデータに分離できる。
ロジックはプログラムの文法で表現される論理的な情報であり、データはロジックに与える情報である。
プログラム中にロジックとデータが混在していると修正コストが高くなる。
ロジックとデータを分離し外部からデータを読み込めるようにすることで、ネイティブコードでも実行中に確認しながらデータを調整できるようになる。

スクリプト言語

ロジックとデータを分離することでネイティブコードでも実行中にデータの修正が可能になった。
しかしロジックについてはビルドし直さなければ修正することが出来ない。
だがスクリプト言語を使用すれば、ロジックをデータのように扱うことができるようになるので、プログラムの実行中にロジックを修正できる。

特定用途のスクリプト言語

特定のゲームシリーズ用や社内用として用途を絞って作られたもの。

  • ノベルゲームのシナリオスクリプト
  • RPGにおけるイベント表現
  • シミュレーションのAI

メリット:用途に適した実装
デメリット:独自開発は大変。既存のツールや知識を利用できない

汎用スクリプト言語

特定用途のスクリプトは開発が大変な上に用途も限られる。
そこで汎用スクリプト言語の出番となる。

メリット

  • 高度な言語機能を備え、開発効率が高い
  • 一般的に品質が高く、バグが少ない
  • 商用利用も無料で可能なものが多い
  • ドキュメントやサポート情報が整備されている
  • 多くのプラットフォームで動作するものがある

デメリット

  • 速度やリソースの使用方法などが対象環境にあわない場合がある
  • 文法が対象用途に特化していないため書きにくい場合がある

スクリプト言語による修正の高速化

スクリプト言語を使うことで実行中に修正を適用出来るようになる

拡大しつつある汎用スクリプト言語のゲーム利用

汎用スクリプト言語を採用しているゲームタイトル

何をスクリプトにすべきか

従来のスクリプトに比べ、汎用スクリプトの適用範囲は広くなっている。

従来のスクリプトの適用範囲

汎用スクリプト適用範囲

  • 敵AI
  • UIの定義や動作
  • シーンの遷移
  • ゲームの勝敗チェック
  • ステージの特殊なギミック
  • デバッグ用の自動テスト機能

高速性を要求される以外の所ほとんど。
開発中に変化しやすい部分をスクリプトで書くと高速で開発できる。

スクリプト言語の速度

ネイティブコードに比べスクリプト言語の実行速度は遅い。
しかし、プログラムの実行速度において遅延の原因はごく一部の処理であることが多いため、パフォーマンスを上げたい部分をネイティブコードに置き換えればいい。

まとめ

スクリプト言語を上手く利用することでプログラムの微修正に要する時間を短縮し、ゲーム開発をスピードアップできる。


スクリプト言語の選択へ続く

この記事で読み進めている本

スクリプト言語による効率的ゲーム開発 新訂版 (LuaとC/C++連携プログラミング)

スクリプト言語による効率的ゲーム開発 新訂版 (LuaとC/C++連携プログラミング)