スクリプトとスクリプトという用語はGame Development Stack Exchangeで同じ意味で使用されているように見えますが、スクリプト言語の選択に関する質問を読んでいる以外に、スクリプトとスクリプト、およびコア言語の関係がわかりません。スクリプトは通常、どのようなときに使用されますか?また、(ゲームプログラマーによって定義された)いくつかのコンテキストのスクリプトはスクリプト言語とは異なりますか?
スクリプトとスクリプトという用語はGame Development Stack Exchangeで同じ意味で使用されているように見えますが、スクリプト言語の選択に関する質問を読んでいる以外に、スクリプトとスクリプト、およびコア言語の関係がわかりません。スクリプトは通常、どのようなときに使用されますか?また、(ゲームプログラマーによって定義された)いくつかのコンテキストのスクリプトはスクリプト言語とは異なりますか?
回答:
スクリプトはスクリプト言語用に作成されています。人々はスラング文の単語を使用して、あなたが言及している混乱をつかむことができますが、スクリプト、スクリプト、およびスクリプト言語の定義をだれかに尋ねると、次のようになります:スクリプトは、スクリプト言語を使用してスクリプトを書く行為です。
スクリプト言語、または言及しているコア言語をゲームエンジンに埋め込むと、ゲームエンジン内のオブジェクトだけでなく、ゲームエンジン用のロジックを記述できるようになります。もう1つの注意点は、スクリプト言語がマシン言語にコンパイルされることはほとんどなく、代わりにバイトコードの形式になり、実行時にゲームエンジンによって解釈されるため、ゲームが一種の仮想マシンに変わることです。
これは開発チームにとって大きな利点がありますが、そのいくつかを次に示します。
特に専門のゲームの種類を習得し、RTSでユニットのグループを移動するためのグループ形成ルールを定義するのにスクリプトがどのように役立つか、またはUIのロジックを作成する方法で、拡張可能なUIをエンドユーザーなどに提供するスクリプト言語。
スクリプトを使用すると、「コア言語」よりも多くの利点があります。これらのいくつかが含まれます:
スクリプトは通常、コアエンジンの外部で実行されるコードです。通常は、テキストファイルを保存したい場所に保存します。その後、通常はエンジンによってロードされ、解析され、実行時に実行されます。
一般的に起こることは、使用する言語(たとえば、Lua、Angelscript)にかかわらず、この言語には通常、エンジンプログラマーがエンジン関数やクラス全体を現在実行中の「スクリプトエンジン」のインスタンスに公開できる機能があります。 。
たとえば(まったくばかげた例ですが、単に理解を深めるためだけに)、ゲームコードには、ゾンビをどこかにスポーンするパブリック関数が含まれている場合があります。
void SpawnZombie(int x, int y, int hp /* whatever else */)
{
//...
}
現在使用しているスクリプト言語を使用すると、実行中のスクリプトパーサーにこの関数を公開できます。これは事実上、テキストファイルを開いて「SpawnZombie(200,300,1337)」と記述し、エンジンがコードを実行すると、その場所でゾンビが生成されることを意味します。
他の回答には、これが典型的にどのように使用されているかの良い例が既にいくつかリストされていますが、私は非常に重要だと思う1つの点を省いています:
これらの種類のスクリプトにより、実行時のゲームプレイのデバッグまたはテストが非常に簡単になります。
ゾンビをマップに配置する最適な方法を見つけて、プレーヤーがそれを発見したときにプレーヤーに最大の恐怖効果を与えたいとします。スクリプトのサポートがなければ、アプリケーションを終了し、コードのマジックナンバーを変更し、再コンパイルしてテストする必要があります。
スクリプトのサポート(デバッグコンソールなど、実行時にテキストを入力する方法が既に用意されている場合)を使用して、「SpawnZombie(333,444,555)」と入力するだけで、その外観を確認できます。
同様に、武器、乗り物をスポーンし、異なるマップをロードし、ゲーム内のいくつかの物の値を変更し、敵をインスタキルすることができます。テスト済みなど
これにより、より複雑なゲームの時間を大幅に節約できます。
スクリプトを使用すると、より高いレベルでロジックを作成できます。言い換えれば、より多くの機能を備えたより少ないコードを記述します。
したがって、次の例では、コードで何かを書くこととスクリプト言語で書くことの違いを示しています。
Update Loop
{
if (CarExplodeAnimation.FinalFrame == true)
{
SceneGraph.Remove(Car);
Message("You have destroyed the car.";
}
else
{
CarExplodeAnimation.AdvanceToNextFrame();
}
}
PlayAnimation(ShipExplode) // blocks until animation completes
Message("You have destoryed the car.")
スクリプト言語を使用すると、デザイナーが行う必要のあるコーディングの量がどれだけ少なくなるかをご覧ください。
その理由はゲームコードにあるため、イベントを複数のフレームに分割し、複数のフレームの観点からコードを記述する必要があります。一方、スクリプトを使用すると、複数のフレームイベントをコードの1行だけと見なすことができます。これは、すべての追加コードがスクリプト関数の背後で抽象化されるためです。
あなたは尋ねるかもしれませんが、その機能はゲームコードでも書けませんか?ええ、しかし、それはデザイナーがゲームエンジンのソースコードを開いてそこにすべてのコードを書く必要があり、デザイナーがゲームエンジンのソースコードを通過することを望まないことを意味します他のコードとすべてがクラッシュします)。
代わりに、デザイナーに代わりに次のような操作を行わせます。マップエディターで車を右クリックし、[スクリプトの挿入]をクリックして、スクリプトコードを入力します。重要なゲームエンジンのソースコードをいじることはありません。