TIL (90) | 2023.12.01 | EnemySniper 버그 수정

kjg5370·2023년 12월 1일
0

TIL

목록 보기
88/91
post-thumbnail

들어가기 앞서

EnemySniper가 플레이어가 가까이 가면 상태머신이 이상해지면서 공격후 제자리에서 일어나는 버그를 발견하였습니다.

오늘 배운 것

  • 문제 발견
    • 기존 로직
      기존에 적이 플레이어를 찾고 공격으로 변하는 상태는 플레이어가 공격 사거리 안에 있는지 판별하고 안에 있으면 공격 상태로 넘어가도록 되어있었음.
      공격 사거리 판단은 플레이어와의 거리를 판단하여 사거리안에 들어오면 플레이어를 공격하는 상태로 변경.
    • 변경된 로직
      공격 사거리 판단 조건을 레이로 변경하여 레이에 플레이어가 감지될때만 플레이어와의 거리를 판별
    • 문제점
      플레이어가 너무 가까이 가면 레이가 벽에 부딧혀 플레이어를 감지 못해서 false를 반환
      추적 사거리 안에 있는데 공격상태가 아닐 때 어떤 동작으로 넘어가는지 구현을 해놓지 않아서 상태가 이상하게 변함
  • 사거리 코드
     protected bool IsInChaseRange()
        {
            // if (stateMachine.Target.IsDead) { return false; }
    
            Vector3 enemyPosition = stateMachine.Enemy.transform.position + new Vector3(0, 1f, 0);
            float ChasingRange = 1f;
    
            if (RaycastToTag(enemyPosition, stateMachine.Enemy.transform.forward, ChasingRange, "Enemy"))
                return false;
    
            float playerDistanceSqr = (stateMachine.Target.transform.position - stateMachine.Enemy.transform.position).sqrMagnitude;
    
            return playerDistanceSqr <= stateMachine.Enemy.Data.PlayerChasingRange * stateMachine.Enemy.Data.PlayerChasingRange;
        }
        protected bool IsInAttackRange()
        {
            // if (stateMachine.Target.IsDead) { return false; }
    
            Vector3 enemyPosition = stateMachine.Enemy.transform.position + new Vector3(0, 1f, 0);
            float attackRange = stateMachine.Enemy.Data.AttackRange;
    
            if (RaycastToTag(enemyPosition, stateMachine.Enemy.transform.forward, attackRange, "Player"))
            {
                float playerDistanceSqr = (stateMachine.Target.transform.position - stateMachine.Enemy.transform.position).sqrMagnitude;
                return playerDistanceSqr <= stateMachine.Enemy.Data.AttackRange * stateMachine.Enemy.Data.AttackRange;
            }
    
            return false;
        }
    IsInChaseRange인데 IsInAttackRange가 false 일 경우의 예외를 추가해서 문제를 해결
profile
학생입니다

0개의 댓글