TIL (since 2023.08.07 ~ )

2023-11-08 TIL(Unity 최종 프로젝트 13일차)

Bastian바스티언 2023. 11. 8. 22:47

 

오늘은 필드맵에 몬스터가 활동하는 MonsterZone을 만드는 맵 디자인 제작과 플레이어 움직임에 존재하는 잔버그들을 수정하는 작업을 했다. 우선 맵제작은 상위의 Terrain에 NavMeshSurface 컴포넌트를 추가하여 해당 터레인 전체에서 NavMeshModifierVolume 컴포넌트를 하나씩 추가하여 MonsterZone을 생성하고 Bake를 해서 맵디자인과 몬스터들이 활동하는 영역을 생성하였다.

 

해당 구역에서 분홍색으로 되어있는 영역이 MonsterZone으로써 나중에 몬스터를 배치했을 때 해당 구역에서 활동할 수 있도록 만드는 구역이다.

 

그리고 플레이어의 움직임에 대한 잔버그들을 수정했는데, 우선 가장 큰 문제는 캐릭터가 언덕같이 조금만 높이가 있는 곳에 진입하려고 하면 자꾸만 FallState로 진입해서 이동하는 것이 굉장히 부자연스러운 부분이었다. 그래서 FallState를 찾아가서 버그를 만들어내는 코드를 살펴보았으나 FallState는 isGrounded 상태일때 IdleState로 전환하는 부분만 Update에서 관리를 하고있었다.

 

PlayerFallState

public override void Update()
    {
        base.Update();

        if(stateMachine.Player.Controller.isGrounded)
        {
            stateMachine.ChangeState(stateMachine.IdleState);
            return;
        }
    }

 

그래서 버그가 발생하는 특징을 다시한번 생각해봤는데,

Player가 경사가있거나 언덕이 있으면, 즉 isground가 아닐때 FallState로 전환되는 부분을 살펴보기 위해 PlayerGroundState를 확인해보았는데 PhysicsUpdate부분에 FallState로 전환하는 코드가 있었다.

해당부분을 주석처리하고 실행을 시켰는데 원하는 방식대로 플레이어가 FallState에 진입하지 않고 지형을 타고 이동하게 되었다.

 

PlayerGroundState

public override void PhysicsUpdate()
    {
        base.PhysicsUpdate();
        // Player가 땅에 있지않고 떨어지고 있는 상태라면 FallState를 적용
        // 중력을 한번에 받는 양이 더 크다(떨어지는 상태를 의미)
        /*
        if(!stateMachine.Player.Controller.isGrounded 
            && stateMachine.Player.Controller.velocity.y < Physics.gravity.y * Time.fixedDeltaTime)
        {
            stateMachine.ChangeState(stateMachine.FallState);
            return;
        }
        */
    }

 

 

오늘 우선적으로 수정해야할 부분들은 수정을 완료하고 나서 다음으로 해야될 것은 플레이어에게 부여되는 특별 능력인데, 아직 기획이 확실치 않아서 우선은 슈퍼점프먼저 구현을 해두려고 했는데 현재 플레이어를 FSM으로 관리를 하고 있기 때문에 스테이트 머신으로 구현을 해두도록 해야겠다.