- Hit 상태 수정
Enemy를 시야 밖에서 때리면 아무것도 못하고 맞기만 하는 상황을 방지하기 위해 선타를 맞았을 경우, 범위가 아니어도 쫓아가도록 수정했다.
private Creature _lastAttacker;
public override void OnHit(IHitCollider attacker) {
if (attacker.HitInfo.Owner is Creature attackerCreature && attackerCreature.IsValid() && !attackerCreature.IsDead && IsTarget(attackerCreature))
Target = attackerCreature;
_lastAttacker = Target; // 자신을 공격한 타겟 저장.
base.OnHit(attacker);
}
private void OnStayChase() {
// ...생략
// Target이 선타하지 않았고 감지할 수 있는 거리 밖으로 벗어나면 Target 정보 초기화.
if (sqrDistance > DetectingRange * DetectingRange && Target != _lastAttacker) {
Target = null;
return;
}
}
TODO: 처리되지 않은 Enemy들은 모두 Chase 상태로 남아있게 되기 때문에 길찾기 알고리즘을 달거나, 플레이어가 방을 이동한 경우에 Enemy의 상태를 초기화 해야한다.
- Dead 상태 수정
Enemy와 플레이어 모두 죽지 않는다.
원인은
1. Hp가 깎이지 않는다.
2. Hp는 깎이는데 상태 전환이 이루어지지 않는다.
둘 중 하나일 것이다.
먼저 Hp가 깎였는지 확인하기 위해 Debug를 찍어보았다.
public float Hp {
get => _hp;
set {
if (_hp == value) return;
if (value <= 0)
{
if (State.Current != CreatureState.Dead)
Debug.Log($"[Creature: {this.Data.Key}] 쥬금");
State.Current = CreatureState.Dead;
_hp = 0;
}
else if (value >= HpMax) {
_hp = HpMax;
}
else _hp = value;
OnChangedHp?.Invoke(_hp);
}
}
Console창에 아무것도 뜨지 않는 걸 보니 Hp가 깎이지 않고 있다.
Hp를 깎는 Damage를 확인해보았다.
public virtual void OnHit(IHitCollider attacker) {
HitInfo hitInfo = attacker.HitInfo;
Debug.Log($"{hitInfo.Damage}의 피해를 입었따. 죽어라 - !");
Hp -= hitInfo.Damage;
// ...생략
}
Damage 값을 받아오는 초기 생성자를 확인해보니 최소값이 0이어서 들어오고 있지 않았다. 수정 후, 실행해보니 잘 동작한다.
그런데 플레이어는 여전히 Damage를 입지 않아서 확인해보니 Enemy의 투사체가 WorldPosition(0, 0)에서 생성되고 있었다.
이제 서로 죽일 수 있다;)
'부트캠프 > Project' 카테고리의 다른 글
Enemy - FSM(5) Blend Tree(블렌드 트리) (0) | 2024.02.14 |
---|---|
Enemy - FSM(4) 트러블 슈팅 (0) | 2024.02.13 |
Enemy - FSM(3) (0) | 2024.02.13 |
Enemy - FSM(2) (0) | 2024.02.08 |
Enemy - FSM(1) (0) | 2024.02.07 |