Bullet 피격과 HUD UI 연동
Bullet 피격은 탄막을 작업하는 팀원과 엮이는 부분이기 때문에 합체!를 하는 과정이 필요했다.
public enum BulletOwner
{
Player,
Enemy,
}
public class Bullet : PoolAble
{
[SerializeField] BulletOwner owenr;
private void OnTriggerEnter(Collider other)
{
switch (owenr)
{
case BulletOwner.Player:
if (other.TryGetComponent(out Boss boss) == true && owenr == BulletOwner.Player)
{
boss.GetDamaged(5);
EnemyBulletPoolManager.instance.OnReturnedToPool(gameObject);
}
break;
// 콜리젼으로 바뀜
//case BulletOwner.Enemy:
// if (other.TryGetComponent(out PlayerStateMachine playerState) == true && owenr == BulletOwner.Enemy)
// {
// playerState.Player.GetDamage(5);
// EnemyBulletPoolManager.instance.OnReturnedToPool(gameObject);
// }
// break;
}
}
}
Bullet이라는 부모 클래스에서 현재 Bullet을 발사한 주체가 누구인지 확인하기 위해 Enum BulletOwner를 받아
트리거 체크를 하게 해주었고, TryGetComponent를 통해 Bullet이 타격해야할 대상이 맞다면
GetDamage 메서드를 호출해 데미지를 입히도록 해주었다.
그리고 이 또한 피격 시 체력UI 변화가 필요했고 하는김에 현재 만들어 놓은 모든 HUD UI를 연동시키게 하였다.
// ### Boss.cs
public void GetDamaged(float damage)
{
CurrentHelth = Mathf.Max(0, CurrentHelth - damage);
float percent = CurrentHelth / Data.maxHealth;
Managers.ActionManager.CallBossAPChanged(percent);
if(CurrentHelth <= 0)
IsAlive = false;
}
보스가 피격당할 때 CallBossApChanged를 호출하여 현재체력 / 전체체력 퍼센트를 넘겨줬다.
플레이어 또한 비슷한 맥락
// ### PlayerStatus.cs
public static event Action<float, float> OnChangeArmorPoint;
public void GetDamage(float damage)
{
_currentArmor -= damage;
if (_currentArmor <= 0)
Dead();
OnChangeArmorPoint?.Invoke(Armor, _currentArmor);
}
부스터 또한 사용 시 대기시간을 시각적으로 알릴 수 있으면 좋기 때문에 이벤트 처리하였다.
// ### PlayerStateMachine
private void HandleDashCoolDown()
{
if (_dashCoolDownTime >= TIME_TO_SWITCHABLE_DASH_MODE)
return;
_dashCoolDownTime += Time.deltaTime;
float percent = _dashCoolDownTime / TIME_TO_SWITCHABLE_DASH_MODE;
Managers.ActionManager.CallUseBooster(percent);
if (_dashCoolDownTime >= TIME_TO_SWITCHABLE_DASH_MODE)
{
CanDash = true;
_dashCoolDownTime = TIME_TO_SWITCHABLE_DASH_MODE;
}
}
리페어 키트또한 마찬가지
// ### PlayerStatus.cs
public void Repair()
{
_currentArmor = Mathf.Min(_currentArmor + 250, Armor);
OnChangeArmorPoint?.Invoke(Armor, _currentArmor);
}
그리고 이 모든것은 HUD 에서 적용된다.
// ### UI_HUD.cs
PlayerStatus.OnChangeArmorPoint += ChangeAPValue;
Managers.ActionManager.OnCoolDownRepair += (percent) => _repairFill.fillAmount = percent;
Managers.ActionManager.OnCoolDownBooster += (percent) => _boosterFill.fillAmount = percent;
Managers.ActionManager.OnBossAPChanged += (percent) => _bossAPFill.fillAmount = percent;
'스파르타 내배캠' 카테고리의 다른 글
스파르타 내배캠 Unity 3기 - 52 (0) | 2024.03.26 |
---|---|
스파르타 내배캠 Unity 3기 - 51 (0) | 2024.03.22 |
스파르타 내배캠 Unity 3기 - 49 (0) | 2024.03.21 |
스파르타 내배캠 Unity 3기 - 48 (0) | 2024.03.19 |
스파르타 내배캠 Unity 3기 - 47 (0) | 2024.03.12 |