2024-09-17

GDevelopの開発環境で変数に特定のシーン名を設定する時はリストから選びたい

GDevelopでシーンを変更する時はリストから既存のシーン名を選択できますが、変数にシーン名を設定する場合はシーン名を直接入力する必要があります。また、シーンに付けた名前を後から変更した場合、GDevelopの開発環境が影響のありそうな所を自動的に新しい名前で置換してくれますが、直接入力したシーン名は変更されません。

拡張機能を自作する案

堅実な方法としては、拡張機能を自作してテキスト型変数にシーン名を保持し、変数に対するアクセスは拡張機能の提供するアクションと式に限定する、といったやり方があります。

概要だけ示すと、例えば SceneManager という拡張機能を作成し、次のシーン名を管理するために NextSceneName という変数を追加します。シーン変数にするかグローバル変数するかは用途に応じて変えます。

SceneManager に対し、 NextSceneName を参照するための NextScene 式と、変更するための SetNextScene アクションを用意します。

イベントシートで次のシーン名を取得したい時は「SceneManager::NextScene()」式を使います。

イベントシートのアクションで次のシーンを変更する時は「その他のアクション」から SceneManager のアクションをクリックすると、リストからシーンを選択できます。

変数にアクセスする手段を制限することで不正なシーン名が入りにくくなり、名称の変更にも対応しやすくなりました(例えば SetNextScene アクションの名前を SetNextSceneName に変えた場合など)。チームで作業したり、拡張機能を不特定多数に配布する場合、このような方法でプログラムの部品を制御することが重要になります。

一方で、製作しようとしている作品の規模によっては、ここまで徹底するのは大げさすぎるかもしれません。

シーン名を渡すだけの式を作成する案

拡張機能でアクションや式のパラメーターを「シーン名(テキスト)」にすると、イベントシートで入力する際にリストからシート名を選択できるようになります。この特徴を利用して「シーン名(テキスト)のパラメーターをそのまま返すだけの式」を作成すれば、必要な時だけリストからシート名を選択できそうです。

拡張機能の式を作成して、パラメーターを「シーン名(テキスト)」にします。


式の内容は戻り値にパラメーターの値を設定するだけです。戻り値もシーン名なので、式のタイプも「シーン名(テキスト)」にします。


イベントシートの条件やアクションで「MyExt::InputSceneName("")」と入力し、カーソルを""の中に移すと、シート名をリストから選択できるようになります。もし後で該当シーンの名前が変わっても、""の中のシーン名は自動的に新しい名前に変わります。


変数に何回か特定のシーン名を設定するだけの場合は、この方法で事足りるように見えます。とはいえ開発が進んでシーン名を扱う箇所が増えていくと、最終的には SceneManager に相当する機能を自作するかアセットストアから導入することになるかもしれません。

もし将来のGDevelopが変数の種類として「シーン名(テキスト)」をサポートするようになった場合、MyExt::InputSceneNameのような機能は単純に無駄になるので、あくまでも現時点の妥協的な手段と考える必要があります。

0 件のコメント:

コメントを投稿