ゲームプログラマとしてはおよそ7年の経験がありますが、ヘキサドライブの皆についていくために、ますます力を入れて頑張っておりますさて、そんな私が最近勉強したスクリプト言語Squirrelについて書いていきます。色々なパラメータなどをソースコード外に置いて管理することが増えていきますが、たまにソースコードの一部をまるごと外に置きたいことがあります。・頻繁に調整が入るNPCの動き大規模なゲーム開発になると、ビルド時間が開発時間を大幅に消耗していくこともあるため、できるだけそういう時間を減らしたいと思っていました。そこで、実行中に一部分だけを逐次コンパイルしやすい言語を使ってみようと思ったわけです。データ駆動などの特性を併せ持つというゲームで利用しやすい面もあります。サンプルとして作ったコンソールアプリのソースコードを掲載いたします。C++で定義したクラスをSquirrelで使用する方法Squirrelで定義したクラスをC++で使用する方法のサンプルです。実行後Cキーで逐次Squirrelのファイルがコンパイルされ、実行されます。0;}SquirrelのコンパイラはC++のライブラリとしてリンクしております。バインダにSqratを利用しております。Squirrelのファイルとしてenemy.nutenemySquirrel.nutを用意します。enemy.nutの中身は単純に各関数の実行確認と名前の設定です。"敵1";inst.name();inst.shot();inst.up();inst.down();inst.left();inst.right();inst.shot();enemySquirrel.nutの中身はクラスの定義とそのインスタンスを作ってます。EnemySquirrel("敵2(.nut内部)");順を追って解説をしていきます。machine上で動くためその生成と利用するための設定を行なっております。内部で定義したクラスをSquirrelで使用する準備をしております。Squirrelは、テーブルとスロットという機能があり、そこに変数やクラス、関数を設定していきます。SqratのScriptクラスを使ってコンパイル実行することができます。Start---\n");script.CompileFile("enemy.nut");script.Run();これでC++で定義した機能をSquirrelで呼び出すことができました。一つの機能だけを外に置いておきたい場合などはこれだけでも利用ができます。複雑なことをしたい時は、Squirrel側でクラスを定義してC++側で利用したいこともあるはずです。その時は、Squirrelのファイルをコンパイル、実行した後、C++で利用します。}}これでSquirrel側で定義したクラスをC++で実行することができるようになりました。初期化、毎フレームの処理、終了処理などの関数名を事前に決めておき、その処理をSquirrel側で書いてC++で利用すればクラスの機能に修正が入っても長いビルド時間など待たずに修正と実行が可能となります。Squirrelが実際のゲームに使用された例としてファイナルファンタジー・クリスタルクロニクルが上げられます。修正と実行のサイクルが素早く行えるようになっております。今回のサンプルが動かせる実行ファイルを置いておきます。細かいエラー処理は行なっておりませんがご了承ください。31最近の記事(12/04)ヘキサドライブ日記、お引越しのお知らせ(11/28)手軽に作詞作曲を。