Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

基本構成要素

Defold の設計の中心には、しっかり理解することが非常に重要な概念がいくつかあります。このマニュアルでは、Defold の基本構成要素が何であるかを説明します。読み終えたら、アドレス指定のマニュアルと、メッセージによる通信を扱うメッセージパッシングのマニュアルに進んでください。すぐに使い始められるよう、エディター内から利用できる一連のチュートリアルも用意されています。

基本構成要素

Defold のゲームを構築するために使う基本構成要素には、次の3種類があります。

コレクション
コレクション(collection)は、ゲームを構造化するために使うファイルです。コレクション内では、ゲームオブジェクト(game object)やほかのコレクションの階層を構築します。一般に、ゲームのレベル、敵の集団、複数のゲームオブジェクトから成るキャラクターを構造化するために使います。
ゲームオブジェクト
ゲームオブジェクトは、識別子、位置、回転、スケールを持つコンテナーです。コンポーネント(component)を格納するために使います。一般に、プレイヤーキャラクター、弾、ゲームのルールを管理するシステム、レベルローダーを作成するために使います。
コンポーネント
コンポーネントは、ゲームオブジェクトに配置して、ゲーム内での見た目、音、ロジックを単独または組み合わせて与える要素です。一般に、キャラクターのスプライト(sprite)やスクリプトファイルを作成したり、効果音やパーティクルエフェクト(particle effect)を追加したりするために使います。

コレクション

コレクションは、ゲームオブジェクトやほかのコレクションを含むツリー構造です。コレクションは常にファイルに保存されます。

Defold エンジンは起動時に、設定ファイル game.project で指定された1つの ブートストラップコレクション(bootstrap collection) を読み込みます。ブートストラップコレクションには「main.collection」という名前がよく使われますが、好きな名前を自由に使えます。

コレクションには、ゲームオブジェクトやほかのコレクションを、深さの制限なく入れ子にして含められます。ほかのコレクションは、サブコレクションのファイルへの参照として含めます。次は「main.collection」というファイルの例です。このファイルには、ゲームオブジェクトが1つ(識別子は「can」)と、サブコレクションが1つ(識別子は「bean」)含まれています。そのサブコレクションにはさらに、「bean」と「shield」という2つのゲームオブジェクトが含まれています。

コレクション

識別子が「bean」のサブコレクションは、「/main/bean.collection」という独立したファイルに保存されており、「main.collection」からは参照されているだけである点に注意してください。

bean コレクション

「main」と「bean」のコレクションに対応する実行時のオブジェクトは存在しないため、コレクション自体をアドレスで指定することはできません。ただし、ゲームオブジェクトへの パス の一部として、コレクションの識別子を使う必要がある場合があります(詳しくはアドレス指定のマニュアルを参照してください)。

-- file: can.script
-- get position of the "bean" game object in the "bean" collection
local pos = go.get_position("bean/bean")

コレクションをほかのコレクションに追加するときは、常にコレクションファイルへの参照として追加します。

Outline ビューでコレクションを 右クリック し、Add Collection File を選択します。

ゲームオブジェクト

ゲームオブジェクトは、ゲームの実行中にそれぞれ独立した生存期間を持つ単純なオブジェクトです。ゲームオブジェクトには位置、回転、スケールがあり、それぞれを実行時に操作したり、アニメーションさせたりできます。

-- animate X position of "can" game object
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)

ゲームオブジェクトは空のままでも使えます(たとえば位置を示すマーカーとして)が、通常はスプライト、サウンド、スクリプト、モデル、ファクトリー(factory)など、さまざまなコンポーネントを備えています。ゲームオブジェクトは、エディターで作成してコレクションファイルに配置するか、実行時に ファクトリー コンポーネントを使って動的に生成します。

ゲームオブジェクトは、コレクション内にその場で追加する(in-place)か、ゲームオブジェクトファイルへの参照としてコレクションに追加します。

Outline ビューでコレクションを 右クリック し、Add Game Object(その場で追加)または Add Game Object File(ファイルへの参照として追加)を選択します。

コンポーネント

コンポーネント(component)は、ゲームオブジェクト(game object)に特定の表現や機能を与えるために使用します。コンポーネントはゲームオブジェクト内に含まれている必要があり、コンポーネントを含むゲームオブジェクトの位置、回転、スケールの影響を受けます:

コンポーネント

多くのコンポーネントには、操作できる種類固有のプロパティがあります。また、実行時にコンポーネントを操作するための、種類ごとの関数が用意されています:

-- disable the can "body" sprite
msg.post("can#body", "disable")

-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )

コンポーネントは、ゲームオブジェクト内にその場で追加(in-place)するか、コンポーネントファイルへの参照としてゲームオブジェクトに追加します:

Outline ビューでゲームオブジェクトを 右クリック し、Add Component(その場で追加)または Add Component File(ファイルへの参照として追加)を選択します。

ほとんどの場合、コンポーネントはその場で作成するのが最も適しています。ただし、次の種類のコンポーネントは、ゲームオブジェクトに参照として追加する前に、別のリソースファイルで作成する必要があります:

  • スクリプト(Script)
  • GUI
  • パーティクルエフェクト(Particle FX)
  • タイルマップ(Tile Map)

利用できるすべてのコンポーネントの種類の一覧は、コンポーネントの概要を参照してください。

その場で追加するオブジェクトと参照として追加するオブジェクト

コレクション、ゲームオブジェクト、コンポーネントの ファイル を作成すると、プロトタイプ(prototype)と呼ばれるものが作成されます(ほかのエンジンでは「プレハブ(prefab)」や「設計図(blueprint)」とも呼ばれます)。これによってプロジェクトのファイル構造にファイルが追加されるだけで、実行中のゲームには何も追加されません。プロトタイプファイルを基にしたコレクション、ゲームオブジェクト、コンポーネントのインスタンス(instance)を追加するには、いずれかのコレクションファイルにそのインスタンスを追加します。

オブジェクトのインスタンスがどのファイルを基にしているかは、Outline ビューで確認できます。「main.collection」ファイルには、ファイルを基にした3つのインスタンスが含まれています。

  1. 「bean」サブコレクション。
  2. 「bean」サブコレクション内の「bean」ゲームオブジェクトにある「bean」スクリプトコンポーネント。
  3. 「can」ゲームオブジェクトにある「can」スクリプトコンポーネント。

インスタンス

プロトタイプファイルを作成する利点は、ゲームオブジェクトやコレクションのインスタンスが複数あり、それらをすべて変更したいときに明らかになります。

ゲームオブジェクトのインスタンス

プロトタイプファイルを変更すると、そのファイルを使うすべてのインスタンスがすぐに更新されます。

ゲームオブジェクトのプロトタイプの変更

ここではプロトタイプファイルのスプライト画像を変更すると、そのファイルを使うすべてのインスタンスがすぐに更新されています。

更新されたゲームオブジェクトのインスタンス

ゲームオブジェクトの親子関係の設定

コレクションファイルでは、1つの親ゲームオブジェクトに対して1つ以上のゲームオブジェクトが子になるような、ゲームオブジェクトの階層を構築できます。ゲームオブジェクトを ドラッグ して、別のゲームオブジェクトの上に ドロップ するだけで、ドラッグしたゲームオブジェクトがドロップ先の子になります。

ゲームオブジェクトの親子関係の設定

オブジェクトの親子階層は、トランスフォーム(transform)に対するオブジェクトの反応に影響する動的な関係です。オブジェクトに適用したトランスフォーム(移動、回転、拡大縮小)はすべて、エディターでも実行時でも、そのオブジェクトの子にも適用されます。

子のトランスフォーム

一方、子の平行移動は親のローカル空間(local space)で行われます。エディターでは、Edit ▸ World Space(既定)または Edit ▸ Local Space を選択することで、子ゲームオブジェクトをローカル空間とワールド空間(world space)のどちらで編集するかを選べます。

オブジェクトに set_parent メッセージを送信して、実行時にその親を変更することもできます。

local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })

ゲームオブジェクトが親子階層の一部になると、コレクション階層内での位置も変わるという誤解がよくあります。しかし、これらはまったく異なるものです。親子階層はシーングラフ(scene graph)を動的に変更し、オブジェクト同士を視覚的に結び付けられるようにします。ゲームオブジェクトのアドレスを決めるのは、コレクション階層内での位置だけです。アドレスは、オブジェクトの生存期間を通じて変わりません。