関数

「イベント関数」または単に関数は、GDevelop の強力な機能です。関数と同じような目的で使われる機能としては、他に外部イベントリンクグループがあります。これらはゲームのイベントを整理したり、複数の場所でイベントを再利用する上でとても役に立ちます。たとえば、いくつかの外部イベントで敵を管理するために共通のイベントを配置し、リンクを使用してさまざまなシーンからこれらのイベントを利用することができます。

しかし関数はそれらよりも、さらに一歩進んだ機能です。イベントを使用して、新しい条件新しいアクション、さらには新しい式を宣言できます。

関数を登録するときに、条件、アクション、または式のいずれかを選択できます。この関数には、シーンや外部イベントと同じように、ゲーム中に条件またはアクションが起動されたときに実行されるイベントを含むことができます。

イベントに加えて、関数には通常の条件、アクション、式と同様にパラメーターも利用できます。パラメーターには、オブジェクト、数値、またはテキストを使えます。

外部イベントを関数で置き換える例を参照してください。またイベントから自動的に関数を作成するも参考にしてください。
関数を使っている様子を次の動画で見ることができます。this video by gamefromscratch

新しい関数の作成

関数は「拡張機能」に分類されます。これらはゲームにインストールできる拡張機能と同じです。新しく追加した拡張機能も含めて、そのゲームの拡張機能のリストをプロジェクトマネージャーで見ることができます。

下部の「+」ボタンをクリックして、新しい拡張機能を作成します。右クリックから名前を変更できます。同じ目的に関連した関数はひとつの拡張機能にまとめると良いでしょう。

リストからいま作成したばかりの拡張機能をクリックすると、拡張機能エディターが開きます。デフォルトの拡張機能には何の機能もありません。左側の[新しい関数を追加]をクリックして追加します。

新しい関数が追加されました。名前を変更して、内部で何をしたいかに応じて名前を付けることができます。たとえばその関数が条件に使われて、パラメーターとして渡されたオブジェクトが戦う準備ができているかどうかをチェックする機能の場合は、IsReadyToFight という名前がいいでしょう(名前に使用できるのは英数字とアンダースコアのみです)。

関数をクリックすると、それを編集できます(設定とイベントを変更できます)。

関数の設定とイベントの編集

関数を選択すると、上部に関数の設定が表示されます。

  • 最初のパラメーターは関数タイプです。種類は「アクション」、「条件」、「式」、「文字列式」です。アクションか条件を選ぶと、ゲームのイベントを編集しているときのアクションか条件の一覧に関数が表示されるようになります。式か文字列式を選ぶと、数式を編集しているときの式一覧に関数が表示されるようになります。
  • 次に、一覧に表示する名前を設定します。
  • 関数のパラメーターを選択するときに、ウィンドウに表示する説明を入力します。
  • アクションまたは条件の場合、イベントシートに表示される文を入力できます。関数がパラメーター(詳細は後述)を受け取る場合は、プレースホルダーを文に埋め込むとパラメーターの値を表示できます。プレースホルダーは PARAMx をアンダースコアで挟んだ形式で、x の部分はパラメーター番号(1 から始まる)と置き換えます。
Rotate objects _PARAM1_

これは「RotateObjects」という名前の関数の例です。タイプはアクションで、「指定されたオブジェクトを回転させます」という説明と、回転させるオブジェクトを受け取るためのパラメーターを 1 つ持ちます。

パラメーター

関数はパラメーターを使うことで、より一層便利で強力にパワーアップします。パラメーターは、関数の設定から追加できます。これらのパラメーターは、イベントシートで アクション、条件、式を使うときに利用できます。ふだん使っている組み込みのアクション/条件/式と、まったく同じです。

「パラメーターの追加」ボタンでパラメーターを追加します。

各パラメーターについて、次の項目を設定できます。

  • 関数のイベント内のパラメーターにアクセスする際に使用する名前。
  • タイプ。パラメーターには、オブジェクト、数値、またはテキストを指定できます。 オブジェクトを選択した場合は、さらにオブジェクトの型も指定できます。
  • 説明です。アクション/条件/式の設定画面に表示されます。

たとえば、回転させるオブジェクトを受け取るパラメーターを次のように追加できます。

これらのパラメーターは JavaScript イベントでも使えます。JavaScript でパラメーターを使う方法はこちらを参照してください。

関数へのイベントの追加とパラメーターの使用

関数を設定したら、次にイベントを追加します。これらのイベントは、条件、アクション、式がゲームの中で使われたときに起動します。

  • すべての既存のイベント、アクション、条件、式を使用できます。ただし使えるオブジェクトはパラメーターとして受け取ったオブジェクトに限定されます。これは関数が外部から渡されたパラメーターのみを利用し、「副作用」がないことを保証するための措置です。副作用は忌むべき習慣であり、関数の再利用と生成を困難にします。
  • 関数はどこでも再利用でき、シーンに限定されないことに注意してください。つまりシーンの変数リストに直接アクセスすることはできません。ただし通常のアクションを使って、変更したい変数を手動で書き込むことはできます。
  • リンクは関数内で使えません。関数は自己完結しており、プロジェクトにさえ外部依存しないためです。

何かのオブジェクトを回転させる関数の例を次に示します。

これは非常にシンプルで実用的ではない関数の例です(関数を使わなくても、アクションでオブジェクトを直接回転させれば済む内容です)。しかし内部ロジックがもっと複雑になったときに、関数の本当の威力が発揮されるでしょう。内部ロジックの複雑さとは関係なく、これをゲームの他の部分から再利用するのは一律にとても簡単です。

関数が条件か式の場合、「関数」カテゴリーのアクションで条件/式の値を設定できます(「戻り値」とも呼びます)。

ゲーム内で関数を使う

関数のイベントを設定および作成したら、これをゲーム内で使えるようになります。

新しいアクション(または条件)を作成し、リストから拡張機能の名前を探して、作成した関数を選択します。

以上です! 関数は他の条件やアクションや式とまったく同じようにイベントエディターで使うことができます。

オブジェクトグループ機能は、関数を作成する際に、類似したオブジェクトをグループ化してパラメーターで受け取るのに役立ちます。これを使うと、アクション/条件をオブジェクトパラメーターのグループ(オブジェクト群を指すパラメーター)に対して一括適用できます。

高度な使用法

このページでは、関数の概要を説明しました。これは GDevelop のもっとも強力な機能の 1 つです。イベントを使用してイベントを拡張できるため、非常に読みやすく簡潔なイベントシートを作成できます。関数を使うことで、ゲームのために記述するイベントの量を減らし、コピー&ペーストを避け、あまつさえバグを減らすことすらできます。オブジェクトの一般的なタスクを常に関数に任せるようにするのです。

再帰関数

関数は自分自身を呼び出すことができます。関数内のイベントでは、ゲームの他の部分でそれができるのと同じように、関数を使ったアクション/条件/式を使用できます。これを「再帰」関数と呼びます。

再帰関数を書く場合は特に注意してください。関数呼び出しを打ち切る条件を追加しない場合、関数はそれ自体を無限に呼び出し、ゲームをブロックするおそれがあります。

「関数」カテゴリーのアクションを使って条件/式の値を返すことができます。

関数の共有

関数はプロジェクト間で共有できます(GDevelopで作成したアクションや条件と同様に)。もっとも簡単な方法は、ただコピー/ペーストすることでしょう。ただし、便利な関数群ができあがった場合は、それらをコミュニティと共有することを検討してください。

再利用と共有については、外部イベントを関数で置き換える例も参照してください。またイベントから自動的に関数を作成するも参考にしてください。