• 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

+ Recent posts