Unity3D_MMO - 플레이어 이동

k_hyun·2022년 10월 18일
0

Unity_MMO_Project

목록 보기
21/33


플레이어가 클릭한 지점으로 이동하는데, 건물도 오르고 있다.


Package Manager에서 AI Navigation을 설치한다.

Navigation (Obsolete)를 선택.


Bake를 누르면 다음과 같이 갈 수 있는 지역들이 하늘색으로 뜬다.

Plants의 Static을 해제하고, 기울기 값을 조절하여 다음과 같이 수정할 수 있다.

더는 지붕을 올라가지 않게 되었다.

단 다음과 같이 건물 안을 클릭한다면 뛰는 것을 멈추지 않는다.


unity chan에 Nav Mesh Agent를 붙인다.

void UpdateMoving()
    {
        Vector3 dir = _destPos - transform.position;
        if (dir.magnitude < 0.0001f)
            _state = PlayerState.Idle;
        else
        {
            // NavMeshAgent를 사용한 이동
            NavMeshAgent nma = gameObject.GetOrAddCompoent<NavMeshAgent>();
            float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);
            nma.Move(dir.normalized * moveDist);

            // Block과 충돌시 멈춘다.
            Debug.DrawRay(transform.position + Vector3.up * 0.5f, dir.normalized, Color.green);
            if (Physics.Raycast(transform.position + Vector3.up * 0.5f, dir, 1.0f, LayerMask.GetMask("Block")))
            {
                _state = PlayerState.Idle;
                return;
            }

            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 10 * Time.deltaTime);
        }

PlayerController.cs에서 UpdateMoving() 함수의 코드를 변경하였다.

NavMeshAgent 컴포넌트에 접근하여 Move 함수를 통해 플레이어를 이동시켰다.

그리고 건물과 장애물의 Mask를 Block으로 설정하였다.

플레이어에서 나오는 Ray가 Block이라는 Mask를 가진 물체와 충돌하면 캐릭터가 멈추게 된다.

0개의 댓글