TIL 0319 최종 프로젝트 - 7 / 보스 이동

강성원·2024년 3월 24일
0

TIL 오늘 배운 것

목록 보기
53/70
post-thumbnail

구현한 내용

주말 간에 보스부터 간단하게 만들기로 결정이 나서 어제부터 구상하고 오늘은 개발을 좀 진행했다.

플레이어 추적 이동

오늘은 일단 플레이어를 추적하는 공중 유닛을 만들었다.

  • 일단 플레이어를 따라갈 때 일정한 고도가 조정되도록 만들었다.
    이를 위해서 모든 이동에 대한 계산에서 y축의 값은 보스가 가진 '기준 고도'로 고정시켰다.

  • 그리고 플레이어에게 따라가다가 중간에 멈추도록 하였다.
    이는 NavMeshAgent의 StopDistance를 따라해봤다.
    추적을 하다가 추적 대상과의 거리가 StopDistance 이하가 되면 추적을 멈추는 것이다.

죽음

그리고 간단하게 죽는 연출을 줬다.
특별한것은 없고 움직임 함수를 호출하지 못하도록 하고, 강체에 [UseGravity]는 true로, [IsKinematic]은 false로 해주었다.
음.. 연출이라 미룰까 했지만 은근 여유가 생길듯하여 나중에는 무작위 방향(x,z)으로 힘까지 주면 뭔가 더 침몰하는 비행선 같은 느낌이 날 것 같다.

트러블 슈팅

보스가 너무 멀리서 멈춰버림

보스가 타겟에게 이동할 때 멈춰야하는 거리인지 확인하는 CheckDistance메서드를 구현했다.

메서드의 내용은 보스와 타겟과의 거리가 StopDistance 이하라면 움직임이 불가하게 하는 것이다.

  • 문제
    작동은 했지만 보스가 너무 멀리서 멈춘다는 문제가 있었다.

  • 분석
    보스가 타겟에게 다가가다가 멈추는 시점에서 거리를 계산해보니 내가 설정해놓은 StopDistance의 두배였다.

    SetDestination으로 목적지를 설정하면 그 목적지로부터 StopDistance떨어진 곳 까지만 이동하도록 하였다.
    내가 계산을 잘못하여서 SetDestination으로 멈춘 그 자리에서 StopDistance만큼 더 먼 곳에서 멈추도록 한 것이었다.

  • 해결
    다시 계산하여 타겟부터 보스까지의 거리가 StopDistance 이하면 멈추도록 수정하였음

protected override void CheckDistance()
{
    Vector3 currentPosition = boss.transform.position;
    Vector3 targetPosition = boss.Target.position;

    //currentPosition.y = 0f;
    targetPosition.y = currentPosition.y;


    float distanceToDestination = Vector3.Distance(currentPosition, targetPosition);

    isMoving = distanceToDestination > stopDistance + 5; // 선형보간 다 따라오면 절대 안멈춰서 임의의 숫자로 미리 멈추게 함
}

고민한 내용

오늘부터는 고민한 아주 사소한 내용도 블로그에 남겨놓을까 생각한다.
개발 내용과 그 외의 프로젝트에 대한 고민도 적을 생각이다.

StateMachine의 MonoBehavior 제거?

StateMachine은 Boss 클래스에서 참조할 컴포넌트 형태의 클래스이다.
처음에는 MonoBehavior 제거를 하는 이유가 명확치 않아서 제거하지 않았다.
=> 하지만 StateMachine에 Boss의 참조를 전달하기에는 MonoBehavior을 제거하고 StateMachine의 생성자를 사용하는 것이 나에게 더 맞다고 결론이 났다.

보스의 이동은 언제 멈추게 할까?

보스가 공격할 때에는 플레이어가 멀어도 이동을 하지 않았으면 한다.
지금은 보스가 이동할 곳을 한 번 찍어주면 이동하는 방식이다.
그러면 공격을 시작할 때 보스의 위치로 목적지를 찍어주면 멈출 것이다.

이 방법은 갑자기 멈추기 때문에 보스와 정말 조금 떨어진 곳에 목적지를 찍어줘도 괜찮을 것 같다.

죽었을 때 무슨 효과 줄까

이 것은 위에 gif로도 올려놨듯이 힘 없이 떨어지는 효과를 적용했다.

profile
개발은삼순이발

0개의 댓글