オブジェクトを作成する


これまでに、素敵な画像やサウンドをリソース ツリーへ追加する方法について見てきました。しかし、依然としてゲームの中ではなにもできません。状況を打破すべく、GameMaker Studio 2 において最も重要なリソースである オブジェクト リソースを追加しましょう。オブジェクトは、ゲームのさまざまな部分をコントロールしたり、一連の物事を実行するために使用する特別なリソースです。ほとんどの場合、オブジェクトにはゲーム ルーム上で見えるようスプライトが割り当てられています。一方で、ユーザー操作やタイミングに関連する処理などを行うための "舞台裏" の 制御役 として使われることもあります。オブジェクトにはアクションを持たせることができ、特定のできごとに反応させるだけでなく、オブジェクトどうしがたがいに反応することも可能です。ゲーム中で目にするもののほとんどすべては、オブジェクトとその相互作用によって成り立っています。

重要! GameMaker Studio 2 では、たとえばキャラクターや敵モンスター、ボール、壁などといったものが、リソース ツリーにあるベース オブジェクトのコピーである インスタンス としてルームへ配置されます。ここで、インスタンス へ影響を与える、または変更を加えるというような文脈のときは、あくまでルーム上に配置されているオブジェクトのコピーのうちのひとつのことを指しており、それ以外のインスタンスには影響はないことを示します。一方、オブジェクト への影響または変更という文脈で話す場合は、そこから生成されるすべてのインスタンスにも反映されるという意味になります。いわば オブジェクトとはインスタンスの雛形のようなものであって、ゲームを作るために実際にルーム上へ配置されるのはインスタンスです

新規オブジェクト リソースを作成するには、ほかのリソースと同様、オブジェクト リソース フォルダーを右クリック して 作成 を選択します。

これがオブジェクト エディターのウィンドウです。現在のオブジェクトのプロパティが表示されています。まず取りかかるべきは、このオブジェクトに名前をつけることです。ここでも、"obj_" のようななんらかの識別子を用いるとよいでしょう。一般に、なにかを描画し、かつ ほかのオブジェクト インスタンスとの衝突を想定するオブジェクトには、 をクリックしてスプライトを追加します。アセット エクスプローラー が開くので、そこから使用するスプライトを選択します:

割り当てるスプライトがまだ作られていない場合は、新規スプライト をクリック して新規スプライト リソースを作成し、編集できます。作成されたスプライトが自動的に現在のオブジェクトへ割り当てられるという点をのぞけば、通常のスプライト作成時と同じ操作が可能です。選択したリソースは、スプライトの編集 や 画像の編集 をクリック して編集することができます。リソースの一覧からリソースを探し出すよりも、この方法を使えばすぐに編集できます。

スプライトを選択し終えたら、たとえばオブジェクトを表示するか非表示にするか、またはどのような当たり判定を設定するかなど、その他さまざまなプロパティを変更できます。単純なゲームなら、ここでなにか変更を加える必要はないでしょう。次にオブジェクトへ イベント を追加していきます。ひとつのゲーム ループに含まれるいくつかの段階の中で、イベントはあなたが指定した特定のプログラムに基づいてアクションを起こします。GameMaker Studio 2 では、ルームが開始する瞬間と終了する瞬間の間をゲーム ループと呼び、その間のすべてのステップ (1ゲーム時間のこと。ゲーム速度の設定によって制御されます) ごとにイベントが実行されています。そして、各インスタンスの各イベントによって呼び出される任意のコードまたは DnD™ アクションを指定することができます。

イベントを追加するには、イベントの追加 をクリック します:

上の画像には、すべての イベント カテゴリー が表示されており、その一部はさらにサブカテゴリーへ派生しています。ここではすべてのイベントについて細かく説明することはせず、最も重要な5つのイベントについて簡単に紹介していきます:

生成イベント 生成イベント オブジェクト インスタンスが生成された最初の瞬間に発生します。ルーム エディターからルームに配置されたインスタンスのなかでは、これが最も早く発生するイベントになります。このイベントは、たとえば、変数の初期化やタイムラインの開始処理、パスの設定といった、インスタンスがルームへ登場した最初の一度だけ実行したい処理を行うために最適です。
ステップ イベント ステップ イベント GameMaker Studio 2 では、1秒間を複数の ステップ へ分割して処理を行っています。ここで、1秒あたりのステップ数を定義する値をゲーム速度と呼びます。ステップは、ゲームが実行されているあいだに常に実行されているループであり、必要に応じてすべてのイベントがチェック、トリガーされます。しかるにステップ イベントとは、存在しているすべてのインスタンスで常にチェックされるイベントのことを指します。ステップ イベント カテゴリーには、インスタンスの前後のタイミングを "微調整" するための3つのカテゴリーが用意されており、通常はメインのステップ イベントが最も頻繁に使用されます。
衝突イベント 衝突イベント ゲームの作成において、2つ (またはそれ以上) のインスタンスがいつ衝突したかを知ることはきわめて重要な意味を持ちます。そのため、衝突イベントが用意されています。このイベントをオブジェクトに追加し、ほかのどのオブジェクトとの衝突を判定するかを指定します。イベントを追加して判定するオブジェクトを設定したら、衝突を解決するためのコードおよび DnD™ を追加できます。
描画イベント 描画イベント 描画イベントのサブカテゴリーには、いくつかの異なる描画イベントが用意されていますが、最も頻繁に使用されるのは単に "描画" と書かれている一番上のイベントです。この標準的な描画イベントは、ゲーム フレームごとに呼び出されるという点においてはステップ イベントと同じですが、2つのケースによって動作が異なります。1つめは、イベントにコードまたは DnD™ を追加 していない ケースです。このケースでは、オブジェクトの変化 (サイズやアルファ ブレンディングが変更されたときなど) に応じて、割り当てられているスプライトが "デフォルトで描画" されます。2つめは、イベントにコードまたは DnD™ を追加しているケースです。イベントになんらかのアクションを追加すると、GameMaker Studio 2 へ "このオブジェクト インスタンスの描画を制御する" と伝え、デフォルトの描画をオーバーライドします。たとえば、なんらかのスプライトが割り当てられているオブジェクトがあったとして、そこへ描画イベントを追加したとします。そして、文字を表示するアクションを描画イベントへ追加するとどうなるでしょうか? GameMaker Studio 2 は、(描画イベントがオーバーライドされているため) 文字を表示するという指示は受け取っていても、スプライトを描画するという指示は受け取っていません。したがって、文字のみが表示され、スプライトは描画されません。
破棄イベント 破棄イベント インスタンスが破棄されたときに実行される、最後のイベントです。たとえば敵が倒されたとき、爆発やパーティクル エフェクトを表示したり、ルーム上の別の場所へ新しいインスタンスを生成させたり、スコアへ得点を追加したり... このイベントの存在はなにかと見落とされがちですが、使いこなせると非常に便利です。

その他さまざまなイベントの詳細については、こちら を参照してください。

イベントが追加されると、プロジェクトの種類に応じて、コード エディターまたは Drag and Drop エディターが開きます。このウィンドウでは、ゲーム ループ中にイベントがトリガーされるたびに呼び出すコードまたはアクションを追加できます。イベントとコードを持つ典型的なオブジェクトの例を次に示します:

DnD™ およびコードを用いてゲーム プログラミングを行う方法については、このクイック スタート ガイドでは取り扱いません。より詳細な情報が知りたい場合は、次の2つのページを参照してください:

  1. Drag and Drop™ の概要
  2. GameMaker Language の概要

加えて、オブジェクト エディター の詳細な説明についてはこちらを参照してください:

  1. エディター: オブジェクト エディター

次のガイドでは ルーム エディター について説明します。ルーム エディターのセクションでは、これまでに学んできたすべてを統合して、プロジェクトをゲームに変化させます...