コア言語ではなく、ゲームで「スクリプト」または「スクリプト」を使用するのはいつですか?


13

スクリプトとスクリプトという用語はGame Development Stack Exchangeで同じ意味で使用されているように見えますが、スクリプト言語の選択に関する質問を読んでいる以外に、スクリプトとスクリプト、およびコア言語の関係がわかりません。スクリプトは通常、どのようなときに使用されますか?また、(ゲームプログラマーによって定義された)いくつかのコンテキストのスクリプトはスクリプト言語とは異なりますか?



@Tetradリンクをありがとうございます。しかし、他の質問では、「いつ」ではなく、「なぜ」という基本的なアーキテクチャの質問について詳しく説明していると思います。

2
「何」と「いつ」は、ユースケースに固有のものです。「理由」は意思決定能力を提供します。詳細がなければ、この質問は(私の目には)duです。
テトラッド

回答:


15

スクリプトはスクリプト言語用に作成されています。人々はスラング文の単語を使用して、あなたが言及している混乱をつかむことができますが、スクリプト、スクリプト、およびスクリプト言語の定義をだれかに尋ねると、次のようになります:スクリプトは、スクリプト言語を使用してスクリプトを書く行為です。

スクリプト言語、または言及しているコア言語をゲームエンジンに埋め込むと、ゲームエンジン内のオブジェクトだけでなく、ゲームエンジン用のロジックを記述できるようになります。もう1つの注意点は、スクリプト言語がマシン言語にコンパイルされることはほとんどなく、代わりにバイトコードの形式になり、実行時にゲームエンジンによって解釈されるため、ゲームが一種の仮想マシンに変わることです。

これは開発チームにとって大きな利点がありますが、そのいくつかを次に示します。

  • スクリプト言語は通常メモリ管理されるため、割り当てを心配する必要はありません。
  • 彼らは通常、あなたがやっていることのために変数の型を使用していることを確認する必要性を取り除く、緩やかに型付けされた言語であり、単に変数を作り、それを使います。
  • 言語自体は非常に単純化されていることが多く、プログラマーではない人々にかなりの制御を提供します。
  • スクリプトを変更するには、コアエンジンを再コンパイルする必要はありません。
  • 多くの場合、スクリプトとコーディングにより、ゲームロジックの非常に反復的なチューニングに必要な時間が短縮されます。
  • 設計と言語によっては、ゲームの実行中にスクリプトをリロードして、チューニング/テストをさらに簡単にすることができます。

特に専門のゲームの種類を習得し、RTSでユニットのグループを移動するためのグループ形成ルールを定義するのにスクリプトがどのように役立つか、またはUIのロジックを作成する方法で、拡張可能なUIをエンドユーザーなどに提供するスクリプト言語。


9

スクリプトを使用すると、「コア言語」よりも多くの利点があります。これらのいくつかが含まれます:

  • コンテンツをコア開発者からアーティストに移動し、コア開発者をゲームプレイタスクからエンジンタスクに解放します
  • スクリプトはサンドボックス化される傾向があり、本当に危険なことはできません
  • スクリプトの変更には、ゲームの再コンパイルと再実行は不要です

最初の箇条書きでは、アーティストが編集するスクリプトに移動される機能の例を提供できますか?

@Brian Reindelの例は、武器/ NPC統計、AI、マップ/レベルです。
ハックワース

1
@Hackworth AIプログラミングはアーティストによって行われていると言っていますか?アーティストが行うスクリプトには、アニメーションや3Dオブジェクトのレンダリングなどのスクリプトが含まれます。
KRB

3
アーティストは何もプログラムしないでください。エンジンをゲームロジックから分離するのは、モジュール性のためであり、開発を他の強みを持つ人々にオフロードするためではありません。
ジョンパーディ

1
@ジェームズ、ポイントは次のとおりです。彼らは「軽い」プログラミングを行いますが、「コンテンツ」キャンプにいます。そのため、用語は扱いにくいものです。=)
ジャリコンパ

6

スクリプトは通常、コアエンジンの外部で実行されるコードです。通常は、テキストファイルを保存したい場所に保存します。その後、通常はエンジンによってロードされ、解析され、実行時に実行されます。

一般的に起こることは、使用する言語(たとえば、Lua、Angelscript)にかかわらず、この言語には通常、エンジンプログラマーがエンジン関数やクラス全体を現在実行中の「スクリプトエンジン」のインスタンスに公開できる機能があります。 。

たとえば(まったくばかげた例ですが、単に理解を深めるためだけに)、ゲームコードには、ゾンビをどこかにスポーンするパブリック関数が含まれている場合があります。

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

現在使用しているスクリプト言語を使用すると、実行中のスクリプトパーサーにこの関数を公開できます。これは事実上、テキストファイルを開いて「SpawnZombie(200,300,1337)」と記述し、エンジンがコードを実行すると、その場所でゾンビが生成されることを意味します。

他の回答には、これが典型的にどのように使用されているかの良い例が既にいくつかリストされていますが、私は非常に重要だと思う1つの点を省いています:

これらの種類のスクリプトにより、実行時のゲームプレイのデバッグまたはテストが非常に簡単になります。

ゾンビをマップに配置する最適な方法を見つけて、プレーヤーがそれを発見したときにプレーヤーに最大の恐怖効果を与えたいとします。スクリプトのサポートがなければ、アプリケーションを終了し、コードのマジックナンバーを変更し、再コンパイルしてテストする必要があります。

スクリプトのサポート(デバッグコンソールなど、実行時にテキストを入力する方法が既に用意されている場合)を使用して、「SpawnZombie(333,444,555)」と入力するだけで、その外観を確認できます。

同様に、武器、乗り物をスポーンし、異なるマップをロードし、ゲーム内のいくつかの物の値を変更し、敵をインスタキルすることができます。テスト済みなど

これにより、より複雑なゲームの時間を大幅に節約できます。


2

1)多くの場合、スクリプトはコードよりも修正がはるかに簡単です。

2)スクリプトは多くの場合、フィールドで変更可能です。これにより、ゲームを改造できます。


だから、あなたのスクリプトは、誰でも編集できるようにコンパイルされていない言語で構築されていると言ってもいいでしょうか?

@ブライアンラインデル:一般的には、はい。
ローレンペクテル

2

ほとんどのスクリプト言語は、コアエンジンの言語よりもはるかに表現力が豊かです。多くの場合、エンジンはパフォーマンス上の理由から比較的低レベルの言語(C ++など)で記述されていますが、ゲームプレイコードはパフォーマンスが高い必要はないため、機能を簡単に表現できるように優先順位が変わります。

たとえば、動的タイピングと静的タイピング。別の例:ガベージコレクションと手動メモリ管理。


0

スクリプトを使用すると、より高いレベルでロジックを作成できます。言い換えれば、より多くの機能を備えたより少ないコードを記述します。

したがって、次の例では、コードで何かを書くこととスクリプト言語で書くことの違いを示しています。

ゲームコード

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行だけと見なすことができます。これは、すべての追加コードがスクリプト関数の背後で抽象化されるためです。

あなたは尋ねるかもしれませんが、その機能はゲームコードでも書けませんか?ええ、しかし、それはデザイナーがゲームエンジンのソースコードを開いてそこにすべてのコードを書く必要があり、デザイナーがゲームエンジンのソースコードを通過することを望まないことを意味します他のコードとすべてがクラッシュします)。

代わりに、デザイナーに代わりに次のような操作を行わせます。マップエディターで車を右クリックし、[スクリプトの挿入]をクリックして、スクリプトコードを入力します。重要なゲームエンジンのソースコードをいじることはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.