ぬーぶのメモ帳

フリーゲームエンジン「Godot」でプログラム経験のない素人の備忘録 最近は色々な動作を考えて試すのが好き。

【Godot】UIを別のスクリプトと連動させたい

アーマードコアのブーストゲージみたいな奴を作る 



ゲームにはヒットポイント、ローディングなど色々な物にゲージが使われています。
数値が視覚的に分かりやすくなりゲームを作る上でもUIを避けては通れず、そこでUIゲージの練習にアーマードコアのゲージっぽい物を作る事に。

方法は解説、チュートリアルを見てグローバル変数を設定、共通の変数から数値とUIのグラフィックを連動させる形が一番簡単そう。

グローバル変数の設定

PlayerとUIゲージのスクリプトで使う共通の変数になる。
【Godot】自動読み込みの設定方法 - ぬーぶのメモ帳

#Global変数
var boost := 100.0
var max_boost := 100.0
Playerでグローバル変数を使用する

下のコードはキーボードの上矢印を押せばブーストゲージを消費して、放すとゲージが回復していく。

#Player 
var can_boost = true

func _physics_process(delta: float) -> void:
#左右移動やmove_and_slideは割愛

#Playerブースト数値関係
	if Input.is_action_pressed("ui_up"):
#ブーストゲージ0でcan_boostがfalseになり飛べなくなる(オーバーヒート)
		if Global.boost <= 0:
			can_boost  = false
#can_boostがtrueだとGlobal.boostの数値を減少させながら飛ぶ
		elif can_boost :
			velocity.y = lerp(-10, -250, 0.2)
			Global.boost -= 1
#ブーストボタンを押していない場合ゲージが回復する
	if not Input.is_action_pressed("ui_up") and can_boost:
		Global.boost += 1
		if Global.boost >= Global.max_boost:
			Global.boost = Global.max_boost
#オーバーヒート状態、数値の回復にペナルティ
#ブーストが全て回復したらcan_boostをtrueにして飛べるように
	if can_boost == false:
		Global.boost += 1 * 0.25
		if Global.boost >= Global.max_boost:
			Global.boost = Global.max_boost
			can_boost  = true

ここでブースト回復の数値は「1」としているが、ジェネレーターを変えるシステム等を追加した場合、そこにもグローバル変数を使うと管理が楽になるはず。

UIゲージの設定

まずTextureProgressのノードを追加する。
次に下の画像のようにゲージ対応する部分に画像を挿入する。

画像を挿入したらTextureProgressを選択して、スクリプトを作成。
作成したスクリプトにTextureProgressのプロパティとグローバル変数を紐づけする。

#UIバー
func _physics_process(delta: float) -> void:

	max_value = Global.max_boost
	value = Global.boost

プレイヤーとUIで必要なリソースにグローバル変数を使う事ととても楽に数値を扱えました。
画像を例にすると別々のコードに100という数値を書く必要がなく、仮にこの数値を変えたくなった時にグローバル変数を変えるだけで済みます。

ブーストゲージの完成

上記のコードで一通り動くゲージを完成させる事が出来ました。

今回覚えた事を生かせばHPバーはもちろん必殺技ゲージやチャージ攻撃も作れそう。