feat: IngameUI의 캐릭터 stat 변경 부분 적용되도록 수정

This commit is contained in:
aube.lee
2025-02-19 14:12:54 +09:00
parent 3f3faf9cce
commit ac551330ea
5 changed files with 55 additions and 34 deletions

View File

@@ -65,11 +65,11 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 0} m_Sprite: {fileID: 21300000, guid: 7155d9d3c459a1945a29adc40045dc25, type: 3}
m_Type: 0 m_Type: 3
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 0
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0
@@ -310,6 +310,7 @@ MonoBehaviour:
monsterHp: {fileID: 5427279369348982334} monsterHp: {fileID: 5427279369348982334}
monsterHpBar: {fileID: 713119143775663342} monsterHpBar: {fileID: 713119143775663342}
monsterImage: {fileID: 3115676712305369735} monsterImage: {fileID: 3115676712305369735}
character: {fileID: 0}
--- !u!1 &2837283741072849140 --- !u!1 &2837283741072849140
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -870,11 +871,11 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 0} m_Sprite: {fileID: 21300000, guid: 7155d9d3c459a1945a29adc40045dc25, type: 3}
m_Type: 0 m_Type: 3
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 0
m_FillAmount: 1 m_FillAmount: 1
m_FillClockwise: 1 m_FillClockwise: 1
m_FillOrigin: 0 m_FillOrigin: 0

View File

@@ -28,6 +28,9 @@ namespace TON
private VariableJoystick joystick; private VariableJoystick joystick;
public Rigidbody2D rb; public Rigidbody2D rb;
public event System.Action<float, float> OnHPChanged;
public event System.Action<float, float> OnSPChanged;
public void Start() public void Start()
{ {
@@ -35,7 +38,6 @@ namespace TON
joystick = ControllerUI.Instance.joystick; joystick = ControllerUI.Instance.joystick;
ControllerUI.Instance.linkedCharactor = this; ControllerUI.Instance.linkedCharactor = this;
attackCollider.EnableCollider(false); // 기본 공격 Enable 비활성화 attackCollider.EnableCollider(false); // 기본 공격 Enable 비활성화
Initialize(); Initialize();
@@ -49,6 +51,9 @@ namespace TON
currentHP = maxHP = playerData.hp; currentHP = maxHP = playerData.hp;
currentSP = maxSP = playerData.mp; currentSP = maxSP = playerData.mp;
OnHPChanged?.Invoke(currentHP, maxHP);
OnSPChanged?.Invoke(currentSP, maxSP);
} }
@@ -170,6 +175,14 @@ namespace TON
public void SkillAttack(string skillId) public void SkillAttack(string skillId)
{ {
SkillBase skillBase = SkillDataManager.Singleton.GetSkillInstance(skillId);
// 스킬을 사용할 수 있는 스킬포인트가 있는지 판단
// 스킬 포인트가 부족하다면 스킬을 수행하지 못함
if (currentSP < skillBase.SkillData.mpConsumption) return;
currentSP -= skillBase.SkillData.mpConsumption;
OnSPChanged?.Invoke(currentSP, maxSP);
// 스킬 매니저에서 스킬을 쏠 수 있는지 여부를 판단 // 스킬 매니저에서 스킬을 쏠 수 있는지 여부를 판단
bool canExecute = SkillDataManager.Singleton.CanExecuteSkill(skillId); bool canExecute = SkillDataManager.Singleton.CanExecuteSkill(skillId);
if (canExecute) if (canExecute)
@@ -189,6 +202,8 @@ namespace TON
currentHP -= damage; currentHP -= damage;
currentHP = Mathf.Clamp(currentHP, 0, maxHP); currentHP = Mathf.Clamp(currentHP, 0, maxHP);
OnHPChanged?.Invoke(currentHP, maxHP);
// 체력이 0 아래로 떨어지고 현 상태가 IsAlive 일때만 동작하도록 함 // 체력이 0 아래로 떨어지고 현 상태가 IsAlive 일때만 동작하도록 함
if (currentHP <= 0f && prevHP > 0) if (currentHP <= 0f && prevHP > 0)
{ {

View File

@@ -15,12 +15,5 @@ namespace TON
linkedCharactor = GetComponent<CharacterBase>(); linkedCharactor = GetComponent<CharacterBase>();
} }
private void Start()
{
IngameUI.Instance.SetHP(linkedCharactor.currentHP, linkedCharactor.maxHP);
IngameUI.Instance.SetSP(linkedCharactor.currentSP, linkedCharactor.maxSP);
IngameUI.Instance.SetPlayerImage(PlayerDataManager.Singleton.player.type);
}
} }
} }

View File

@@ -42,10 +42,17 @@ namespace TON
} }
// 선택된 캐릭터에 맞는 오브젝트를 생성하거나 적용하는 코드 작성 // 선택된 캐릭터에 맞는 오브젝트를 생성하거나 적용하는 코드 작성
PlayerSpawner.SpawnPlayerCharacter(); if (!PlayerSpawner.SpawnPlayerCharacter())
{
Debug.LogError("Failed to spawn player character!");
// 에러 UI를 표시하거나 씬을 다시 로드하는 등의 처리
// UIManager.Show<ErrorUI>(UIList.ErrorUI);
// 또는 SceneManager.LoadScene("ErrorScene"); 등
yield break;
}
SkillDataManager.Singleton.Initalize(); SkillDataManager.Singleton.Initalize();
StageManager.Singleton.StartStage(stageId); StageManager.Singleton.StartStage(stageId);
UIManager.Show<IngameUI>(UIList.IngameUI); UIManager.Show<IngameUI>(UIList.IngameUI);
UIManager.Show<OptionUI>(UIList.OptionUI); UIManager.Show<OptionUI>(UIList.OptionUI);
UIManager.Show<ControllerUI>(UIList.ControllerUI); UIManager.Show<ControllerUI>(UIList.ControllerUI);

View File

@@ -21,37 +21,44 @@ namespace TON
public Image monsterImage; public Image monsterImage;
private float currentHP;
private float maxHP;
private float currentSP;
private float maxSP;
private string playerType; private string playerType;
[SerializeField] private CharacterBase character;
private void OnEnable() private void OnEnable()
{ {
character = GameObject.FindWithTag("Player").GetComponent<CharacterBase>();
playerType = PlayerDataManager.Singleton.player.type;
if (character != null)
{
character.OnHPChanged += UpdateHPBar;
character.OnSPChanged += UpdateSPBar;
}
// UI가 활성화될 때 저장된 값들로 업데이트 // UI가 활성화될 때 저장된 값들로 업데이트
RefreshUI(); RefreshUI();
} }
public void SetHP(float current, float max) private void OnDisable()
{ {
currentHP = current; if (character != null)
maxHP = max;
if (gameObject.activeInHierarchy)
{ {
hpBar.fillAmount = current / max; character.OnHPChanged -= UpdateHPBar;
character.OnSPChanged -= UpdateSPBar;
} }
} }
public void SetSP(float current, float max) private void UpdateHPBar(float current, float max)
{ {
currentSP = current; hpBar.fillAmount = current / max;
maxSP = max; }
if (gameObject.activeInHierarchy)
private void UpdateSPBar(float current, float max)
{ {
spBar.fillAmount = current / max; spBar.fillAmount = current / max;
} }
}
public void SetPlayerImage(string type) public void SetPlayerImage(string type)
{ {
@@ -64,8 +71,6 @@ namespace TON
private void RefreshUI() private void RefreshUI()
{ {
if (maxHP > 0) SetHP(currentHP, maxHP);
if (maxSP > 0) SetSP(currentSP, maxSP);
if (!string.IsNullOrEmpty(playerType)) UpdatePlayerImage(); if (!string.IsNullOrEmpty(playerType)) UpdatePlayerImage();
} }