ゲーム作りの基本コンセプト:GDevelop を使うために知っておきたいこと

GDevelop の基本コンセプトはシンプルです。ソフトを使いはじめるにあたって、この後の説明を読んでおいてください。GDevelop をまだ入手していない場合は、ここから最新バージョンをダウンロードしてください

画面に表示されるもの:オブジェクト

画面に表示されるものはすべて「オブジェクト」と呼ばれます。オブジェクトの種類が違うと、それによって表示されるゲーム要素の種類も変わります。たとえばゲームグラフィックの多くは「スプライト」と呼ばれるオブジェクトです。テキストは「テキスト」オブジェクトで表示し、炎や火花のようなエフェクトは「パーティクルエミッター」が生成します。

オブジェクトを表示する位置:座標

GDevelop の画面/シーン上に表示されるオブジェクトは、X 座標と Y 座標を持ちます。これらの座標は、デカルト平面上の水平位置(X 軸)と垂直位置(Y 軸)に対応しています。

X 座標は、左に行くと減少し、右に行くと増加します。Y 座標は、下に行くと増加し、上に行くと減少します。

オブジェクトを移動したり回転するには、その角度を度数で指定します。次の図は GDevelop に回転角度を指定する方法を示しています。

角度はマイナスの値で表現されることもあるという点に注意してください。たとえば -90 度は 270 度と同じ角度です。

サインコサインのような三角関数を使用する場合は、角度をラジアンで指定します(1 ラジアン=180 / PI 度、1 度=PI / 180 ラジアン。PI は円周率を表し、値は約 3.14159)。

イベントとそれがいかにしてオブジェクトを選択するか

イベントは、ゲームのルールを作成するために使います。これは条件とアクションから構成されます。そして条件とアクションの大半は、オブジェクトを参照します。

  • 条件はどのオブジェクトが対象になるかをテストします。
  • アクションは対象オブジェクトを操作します。位置や外観などを変更できます。

条件を指定しないと、すべてのオブジェクトがアクションの操作対象になります。あるイベントで最初にオブジェクトを使うときは、GDevelop はシーンから指定された名前のすべてのオブジェクトを検査し、ときにはそれを変更します。 同じイベントの 2 回目以後では、GDevelop は前回の条件で抽出されたオブジェクトだけを検査し、変更します。

たとえば下のイベントには条件がありません。そのため、「Square」という名前のすべてのオブジェクトが削除されます。

次のイベントには条件があります。X 座標が 100 ピクセル未満の「Square」オブジェクトだけを削除します。

やってみよう! 🎮次のサンプルをオンラインで実行してみましょう: https://editor.gdevelop-app.com/?project=example://object-selection

イベント:順番が重要

イベントの順番(実行順)はとても重要です

一番上にあるイベントが一番最初に実行されます。ゲームが表示されるたびに、イベントは毎回実行されます。この表示処理単位はフレームと呼ばれ、1秒間に60回実行されます。次の2つの例は、同じではありません

  • 上のイベントブロックでは、座標 X が 100 で Y が 200(100;200)の位置に「Square」オブジェクトを作成します。それから作成したものをすぐに削除します。「Square」は画面上に表示されません。作成された直後に削除されるからです。
  • 下のイベントブロックでは、まずすべての「Square」オブジェクトを画面から削除します。次に座標 X が 100 で Y が 200(100;200)の位置に「Square」を1個作成します。このイベントでは Square が画面に表示されます(次のフレームで削除されますが、またすぐに再作成されます)。

ビヘイビア:オブジェクトのための定義済みルールとロジック

ビヘイビアは、何らかの定義済みのロジックでオブジェクトを拡張します。ビヘイビアはとても簡単に使えて、単純なタスクを自動化するようなシンプルな使い方から、もっと複雑で高度な使い方まで、幅広く利用できます。例を挙げましょう。

  • ビヘイビアで画面の外に出たオブジェクトを自動的に削除できます(ゲームのメモリ使用量を抑制)。
  • 別のビヘイビアで画面上のオブジェクトを矢印キーで移動できます。
  • さらに別のビヘイビアで、画面上のオブジェクトをマウスやタッチ操作でドラッグ移動できます。
  • Physics ビヘイビアは高度なビヘイビアの例です。物理法則にのっとったリアルな挙動でオブジェクトを移動できます。

オブジェクトビヘイビアはイベントで操作できます。くわしくはオブジェクトビヘイビアを読んでみてください。

自分のニーズに応じてカスタム ビヘイビアを作成することもできます。これは作っているゲームの規模が大きくなってきたときにもお勧めです。オブジェクトがどのように動作するかというロジックをカスタム ビヘイビアに集約することで、イベントシートの肥大化を防げるからです。こちらのチュートリアルも参考になるでしょう。

オブジェクトの移動:組み込み機能のフォースを使う

オブジェクトの移動は、フォースという仕組みで実現できます。フォースはオブジェクトを「押す」作用のことです。

次のような指定ができます。

  • X 軸と Y 軸上のフォースの座標(ピクセル単位のベクトル)
  • または極座標(度数単位のフォースの角度とピクセル単位の距離)
  • フォースが瞬間的(オブジェクトを「1 回だけ」押す)か、永続的(フォースが削除されるまで、オブジェクトをずっと押し続ける)か。

このオブジェクトを下に向かって動かしたいとしましょう。

フォースの X/Y 座標を指定します。X 座標は 0、Y 座標は 150 ピクセルにします。あるいは極座標を指定して、角度を 90 度、距離を 150 ピクセルにしても同じことです。

オブジェクトを移動する他の方法

物理エンジンやパスファインディングなど、一部の「ビヘイビア」にはオブジェクトを移動させる機能を持つものがあります。これらを使う場合は、組み込みのフォースシステムと併用せず、ビヘイビアが提供するアクションのみを使用することをお勧めします。

やってみよう! 🎮次のサンプルをオンラインで実行してみましょう: https://editor.gdevelop-app.com/?project=example://move-object-with-physics

オブジェクトを移動するこれらの他の方法については、こちらのページでくわしく説明されています。

メモリ上に情報を格納する:変数

変数にはデータを入れておくことができます。データとは、たとえばゲームで使う数字や文字列がそれです。比喩的には、変数はメモをしまっておける引き出しや箱のようなものと考えてもいいでしょう。それが文字列数字の形式で表現できる限り、どんなデータでも変数に保存できます。ゲーム中のプレイヤーの残機数やハイスコア、残り銃弾数、倒した敵の数等、なんでも変数に入れておけます。一般的には変数に数値を格納することが多くなるでしょう。

アクションと条件では、変数のを検査したり変更します。

変数はどこに保存されますか?(変数の「スコープ」)

変数のスコープは、変数にアクセスできる範囲を定義します。GDevelop には 3 種類の変数スコープがあります。

  • グローバル変数はすべてのゲームシーンからアクセスできます。たとえばプレーヤーのスコアをグローバル変数に保存すると、違うレベルやシーンからもアクセスできます。
  • シーン変数はそれが作成されたシーン内でのみアクセスできます。あるシーンの中だけでしか必要ないデータに使用します。たとえば時間制限のあるレベルやシーンの残り時間をシーン変数で管理します。
  • オブジェクト変数は1つのオブジェクト内でのみ有効です。たとえばヒーローに「Health」や「Ammo」の変数を持たせます。
変数に関しては次のページ変数も参照してください。変数はゲームでとてもよく使われます。多くのサンプルやチュートリアルで、使用例を見ることができます。
変数の使い方を説明したビデオチュートリアルを見たい場合は、Variables explained for Non-programmers にアクセスしてみてください。

高度な概念:最後のフレームからの「経過時間」(TimeDelta)

ゲームはイベントを評価して、毎秒複数回 画面を再描画します。つまり一瞬のあいだにゲームがリフレッシュし、アップデートするわけです。これがどの頻度で繰り返されるかは、実行中のコンピューターの性能に依存します。コンピューターが遅ければ1秒間に 25 フレームかもしれませんし、速ければ 60 フレームでしょう。GDevelop はどのコンピューターでも同じフレーム数になるように調整していますが、それでもコンピューターによってある種の処理速度が変わることがあります。たとえば、数学的な計算や移動の描画がそうです。

スピードの変更を一定にするために TimeDelta()を使ってください。これは最後のフレームからの経過秒数を返します。 下記は、やってはいけない例です。

次のようにすると、うまくいきます。

  • 最初のイベントでは、ゲームが再描画されるたびに変数に 20 を加算しています(最大60回/秒)。しかし変数の増加速度がコンピューターによって変わってしまうようなイベントを利用するのは間違っています。たとえば 10 秒後に変数の値がどうなっているか、誰にも予測できません。それはゲーム中に描画されるフレーム数によって変わるからです。
  • 2 番目のイベントは正確で信頼性があります。数値 300 を TimeDelta() と掛け算していますね。この結果、変数はすべてのコンピューターで同時に増加します。TimeDelta() が秒単位の時間を返すので、増加量を正確に計算できるのです。この場合は、変数が毎秒 300 単位ずつ増分します。したがって 10 秒後には 3000 増加するということを予測できます。その間のフレーム数がいくつかを気にする必要はありません。
GDevelop がゲームを最大速度 60 フレーム/秒で実行している限り、最初のイベントのやり方を使っていたとしても、そこに問題があることには気づかないでしょう。だとしても、この件を意識して TimeDelta() 版の方を使うように心がけるのが賢いやり方です。

アドバイス:値を継続的に追加していく場合は、TimeDelta() を使ってください。一回きりのアクションであれば、TimeDelta を使わず任意の値を使ってもかまいません。たとえば衝突したオブジェクトを消す場合など、ゲームの速度に依存しなければ問題ありません。

フォースを使ってオブジェクトを移動する場合は、GDevelop が自動的に内部処理するので、TimeDelta() を使う必要はありません。

さて…あなたがいま知っておくべきことは、これでほぼ全部です

➡️ GDevelop で本物のゲームを作る方法を説明した、もっとたくさんのチュートリアルがあります。