UI 담당은 아니었으나 적용되는 원리에 대해 공부도 할겸 Stat 손대는김에 같이 작성했었다.
중간에 이상한곳에 적용하기도 했고 쌩뚱맞게 다른방법도 시도해보고 했었는데 정신없는 나머지 어떤식으로 했었는지 기록하지는 못했다......(ノへ ̄、)
using UnityEngine;
using UnityEngine.UI;
public class ConditionUI : MonoBehaviour
{
public PlayerCondition playerCondition;
public Image _Health;
public Image _Hunger;
public Image _Stamina;
public Image _Moisture;
public string conditionType;
private void Update()
{
if (playerCondition == null)
{
playerCondition = GetComponentInParent<PlayerCondition>();
}
if (_Health != null)
_Health.fillAmount = SafeDivide(playerCondition.curHealth, playerCondition.maxHealth);
if (_Hunger != null)
_Hunger.fillAmount = SafeDivide(playerCondition.curHunger, playerCondition.maxHunger);
if (_Stamina != null)
_Stamina.fillAmount = SafeDivide(playerCondition.curStamina, playerCondition.maxStamina);
if (_Moisture != null)
_Moisture.fillAmount = SafeDivide(playerCondition.curMoisture, playerCondition.maxMoisture);
}
private float SafeDivide(float numerator, float denominator)
{
if (denominator == 0)
{
return 0f;
}
return Mathf.Clamp01(numerator / denominator);
}
}
PlayerCondition의 Cur 값을 이용해 이미지의 FillAmount를 변경하여 게이지 바가 줄어들도록 했다.
SafeDivide라는 메서드를 작성하여 두 숫자를 나누는 작업을 처리했으며, 이 메서드는 FillAmount의 값을 0에서 1 사이의 숫자로 변환하여 게이지 바의 비율을 조절하기 위해 사용했다.
이렇게 각 상태(Stat)의 값이 변화할 때마다 UI의 게이지가 지속적으로 업데이트 되도록 했다.

각 스탯의 이미지가 묶여있는 오브젝트에 ConditionUI 스크립트를 적용해주고 각 이미지를 넣어서 적용해주면 정상적으로 작동!
'Unity > Unity Study' 카테고리의 다른 글
| [Unity] 3D Surviver 팀 프로젝트 중, Player 사망처리 및 애니메이션 (0) | 2025.03.25 |
|---|---|
| [Unity] 3D Surviver 팀 프로젝트 중, Player Animation 일부 문제 (bool, trigger) (0) | 2025.03.21 |
| [Unity] 3D Surviver 팀 프로젝트 중, Player Animation 설정 (feat. Mixamo) (0) | 2025.03.19 |
| [Unity] 3D Surviver 팀 프로젝트 중, 트러블슈팅 : 달리기 및 스탯변화 (0) | 2025.03.18 |
| [Unity] 3D Surviver 팀 프로젝트 중, 스탯 부분 리팩토링 (2) | 2025.03.18 |