TIL 0415 최종 프로젝트 - 16 / Ball 기능, 스택오버플로우, 스폰 포인트 오류

강성원·2024년 4월 24일
0

TIL 오늘 배운 것

목록 보기
62/70

개발한 내용

Ball 폭발 데미지 기능

  • 볼의 데미지 -> Physics.SphereCastAll을 호출해서 볼 주변에 닿는 요소를 체크하고 주변의 몹들과 플레이어에게 데미지를 준다.
private void Explosion()
{
    float damage = Context.Entity.Data.damage;

    RaycastHit[] hits = Physics.SphereCastAll(Context.Entity.transform.position, 10, Vector3.up, 0f);

    foreach (RaycastHit hit in hits) 
    {           
        if (hit.transform.gameObject.TryGetComponent(out Entity entity))
        {
            ,,,생략,,,

            entity.GetDamaged(damage);
        }

        if (hit.transform.gameObject.TryGetComponent(out Module module))
        {
            module.ModuleStatus.GetDamage(damage);
        }
    }
,,,생략,,,
}

이 외에는 기록하기에는 너무 애매한 것들이라 생략!

개발 중 겪었던 문제

스택 오버 플로우

  • 개발자가 실수하면 나오는 스택 오버 플로우..
  • 문제 지점은 이 곳이다.
  • 호출 스택을 살펴보니 BaseState 클래스의 UpdateStates 메소드가 계속해서 자신을 호출하는 현상이 일어났다.

뭔가 이상해서 각 스테이트의 시작 부분에 로그를 찍어보니
원래는 Idle스테이트 → Chasing 스테이트 → Idle스테이트 여야 서로 왔다갔다를 하는데

Chasing스테이트에서 상태 변환을 잘못 호출해서
[Idle → Chasing → Combat] 이렇게 호출하였고 또 Combat에서는 공격할 거리가 안되니 Idle로 호출을 하고.. 무한 반복이었다.

스폰 포인트 오류

  • 빨간색 표시가 몹이 스폰되는 포인트이다. 잘 보면 구조물 안에 생겨버리는 현상이 발생했다.
  • 우리 게임에서는 구조물을 게임 시작 후 몇 초 있다가 생성하는 방식이다.
    구조물 생성과 스폰 포인트 생성의 순서가 꼬인 듯 하다.
  • 우선 스폰을 할 때 셀 위치가 적당한지 체크해봤다.
    적당하다. 이거는 문제 없다.
  • 코드에서 구조물 생성 후에 스폰 포인트를 찾도록 순서를 바꿔주었다.
    음음. 구조물 위에 몹이 잘 생성된다.

암튼 오늘도 해결!

profile
개발은삼순이발

0개의 댓글