アクションゲームツクールMVでは、ギミックタイルという機能を使って、タイルとプレイヤーが重なった等のトリガーで、変数を変えたりパーティクルを発生させたりすることができましたが、アクションゲームメーカーで同じようなことはできますか?
TileにはPGMのようなギミック機能はありません。将来的にTileに特別なオプションを提供する可能性について議論はありますが、それがいつ、どのように実現するかは現時点ではお答えできません。
現在、Tileに対して利用可能なオプションは以下の通りです。また、ビジュアルスクリプトを使用したGameObjectを活用することで、PGMのギミック動作を実現することも可能です。
こちらですが、ギミックタイルの機能はありませんが、スクリプトを用いた代替手段はあるという状態です。
理由としましては、Godotでは「タイル自体にスクリプトを設定する」という設計をしておらず、スクリプトで動作するものは「StaticBody」「CharacterBody」「Area2Dの」などのノードを使うことになっているためです。
スクリプト無しでも扱えるギミックタイルの代替になる機能は検討中ではありますがまだ無い状態です。
さて、その場合でご相談頂いた内容に関する解決策ですが、
タイルとプレイヤーが重なった等のトリガーで、変数を変える
こちらは、スクリプトではなくタイルのエリアIDを使い、指定のエリアIDになると変数を変化させるような子オブジェクトをプレイヤーにつけるのがよいかとおもいます。
タイルとプレイヤーが重なった等のトリガーで、パーティクルを発生させる
StaticBody2Dでオブジェクトを作るのがよいかと思います。以下のような設定をすることでキャラクターが触れている間GPUParticle2Dのパーティクルを出す、という設定をすることができます。
サンプルオブジェクト:
StaticBody2D_ギミック.zip (1019 バイト)
コードの中身:
extends StaticBody2D
@onready var particles: GPUParticles2D = $GPUParticles2D
@onready var area: Area2D = $Area2D
func _ready() -> void:
particles.emitting = false #Emittingをオフ
# コードでシグナルを接続
area.body_entered.connect(_on_area_body_entered)
area.body_exited.connect(_on_area_body_exited)
func _on_area_body_entered(body: Node2D) -> void:
if body.is_in_group("Player"):
if particles.one_shot:
particles.restart()
particles.emitting = true
func _on_area_body_exited(body: Node2D) -> void:
if body.is_in_group("Player"):
# AreaからでるとEmittingをオフ
if !particles.one_shot:
particles.emitting = false
ご説明ありがとうございます。
申し訳ありませんが、私はgodotの知識があまりないため、いただいた解決策について、具体的に何をどのように実装すればよいのか全く分かりません。
いただいたサンプルオブジェクトの使い方もよく分かりません。
スクリーンショットや動画等でご説明をいただくことはできませんでしょうか?
サンプルオブジェクトの使い方ですが、
同梱されているstatic_body_2d.tscnとstatic_body_2d.gdを同じフォルダにいれていただき、ゲームオブジェクトと同じようにドラッグ&ドロップかインスタンス化でステージに読み込んでいただければ動作します。
中身は以下のようになっていますが、
一番上のCollisionShape2Dが「壁判定」
GPUParticles2Dがパーティクル
Area2Dの子のCollisionShape2Dが「接触の検知範囲」
となっています。
仕組みとしては、「Playerの壁判定」が「接触の検知範囲」にある間、「GPUParticles2D」という名前パーティクルからパーティクルがでるようになっています。
基本的には、
- 新たにSprite2Dを追加いただきテクスチャを設定
- テクスチャのサイズに合わせて壁判定のサイズを調整
- 2.より一回り大きくなる程度に接触判定を設定
- 「GPUParticles2D」の設定を変更し、パーティクルが出るように設定。
という手順を行えば動作するはずです。
ChatGPTなどにこのコードを渡すことでカスタマイズもできるんじゃないかとはおもいます。
ご説明ありがとうございます。
旧アクツクのギミックタイルですと、触れた後に変数を変更したうえでタイルが消滅するという動きができますが、これはパーティクルの表示のみなのでできないのでしょうか?
マリオでいうところのコインをギミックタイルで再現したいと思っているのですが。
こちらチーム内で相談をしていたところ、プラグインとしてBazさんが実装をしてくれました。こちらの機能を使うといかがでしょうか?

