2024-09-16

GDevelopの「オブジェクトを生成する」アクションの計算式の中で生成対象のインスタンスの高さを取得できない

タイトルに書いてみると当然の処理結果なのですが、GDevelopは「Ball.Height()」のような式を見ただけでは特定のインスタンスの高さなのかBall全体の初期値としての高さなのかが必ずしも自明ではないため、備忘録として残します。

アクションゲームの製作で、プレイヤーの頭上からボールが落ちてくるギミックを考えます。今回は、プレイヤーが白い箱に接触したら、頭上にボールを表示することにします。


イベントシートで、プレイヤーと白い箱が衝突したことを条件に「オブジェクトを生成する」アクションでボールを生成します。ボールの生成位置のY座標を「Player.Y()-Ball.Height()」と書くことで、プレイヤーの左上座標よりもさらにボールの高さ分だけ高い位置にボールが生成されそうに見えます。


プレビューしてみると、プレイヤーと白い箱が接触した瞬間に、プレイヤーと同じ高さにボールが表示されてしまいました。一方で、同じイベント行の中でボールの生成後に高さを取得することは成功しており、「ボールの高さ=32」と表示されました。




動作確認のために、問題の式を「Player.Y()-32」にすると、プレイヤーの頭上にボールが出現しました。この場限りの対応ならこれで終わりですが、この機能が他のところにコピーされてしまうと、ボールの高さが変わった時に修正の手間が増えるかもしれません。

ボールの高さを直接記入する代わりに変数を使うと、ボールの高さを変えたい時に修正するのが変数だけで済みます。

ボールが一度生成されれば高さを取得できる点に注目して、ボールの生成は人から見えない位置で実行し、後から移動する方法もあります。生成後の移動時のY座標に「Player.Y()-Ball.Height()」と書くと期待通りに動作します。ただしイベントに記入するアクションが常に1つ増えるため、その労力が成果に見合うかは作ろうとしているゲームの仕組みにもよるでしょう。


最後に、変数を使った場合の動作例を載せます。





0 件のコメント:

コメントを投稿