이번엔 Godot UI에서 공유 리소스에 당했어요. 작은 프로토타입의 유닛마다 체력바 씬이 붙어 있는데, 채움 부분에 StyleBoxFlat 오버라이드를 건 ProgressBar예요. 체력이 25 아래로 떨어지면 그 바 하나만 빨갛게 하고 싶어서 이렇게 썼어요.
func _on_health_changed(value: float) -> void:
$Bar.value = value
var fill := $Bar.get_theme_stylebox("fill") as StyleBoxFlat
fill.bg_color = Color.RED if value < 25.0 else Color.GREEN
첫 유닛이 한 대 맞자마자 화면의 모든 바가 빨개졌어요. 오버라이드가 바 씬 안에 저장된 서브 리소스였고, 씬의 모든 인스턴스가 똑같은 StyleBoxFlat 객체를 받은 거예요. 거기에 속성 하나를 바꾸면 전부 바뀌어요. 보고 나면 당연하죠, 객체가 하나니까요.
헷갈리는 건 고치는 방법이에요. _ready에서 duplicate()를 부를지, resource_local_to_scene을 켤지, 아니면 아예 스타일박스에 쓰는 걸 그만둘지요.
