맵
맵 같은 경우에 미적 감각이 전혀 없는 나로서는 Terrain의 사용법만 익히고 에셋을 통해 제작하였다. 기본적인 초원과 물, 나무로 이루어져있다.
Navigation
내비게이션은 유니티에서 제공하는 길 찾기 ai이다. 자세한 내용은 유니티 포럼에서 찾을 수 있는데 여기서는 가볍게 어떻게 사용하고자 하는지에 대해 알아보자.
내비게이션은 2022 이후 버전과 이전 버전으로 나뉜다. 이전 버전이 자료가 훨씬 많고 많은 사람들이 이용하고 있다. 필자는 2022 이후 버전을 다뤄볼 계획이다.
오른쪽에 있는 것이 2022 이전버전이고 왼쪽에 있는 것이 신 버전이다. 메뉴만 봐도 2개의 창이 줄어들었으며 특히 제일 중요한 Bake가 없어진 것이 특이점이다. Bake란 길 찾기를 위해 필드에 존재하는 mesh를 구워 미리 그 정보를 추출하는 과정을 의미한다.
신규 버전에서는 내가 bake할 obj만 bake를 할 수 있다. 이전 버전에도 가능하지만 일일이 추가를 해주어야 하기 때문에 귀찮은 작업이다.
이렇게 내가 Bake 하고 하는 물체만 묶어서 한 객체의 자식으로 둔 다음 부모에 Surface를 추가해 작업을 하면 된다.
여기서 Collect Objects에서 자식 계층만 선택하면 된다.
이외에도 Layer에 따라 Bake하거나 모든 객체, Modifier를 가지고 있는 객체만 Bake할 수 있다.
결과를 확인해보면 갈 수 있는 영역이 눈에 띄게된다.
플레이어를 Navigation을 통해 움직이기 위해서는 특정 객체가 Agent를 포함하고 있어야한다.
Steering을 잘 조절해서 원하는 값을 얻을 수 있다.
이동 스크립트
이제 실제로 마우스 우클릭을 했을 때, 그 좌표로 이동을 해보자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class MyPlayerController : PlayerController
{
Camera mainCamera;
protected override void Init()
{
base.Init();
mainCamera = Camera.main;
mainCamera.GetComponent<CameraController>().SettingPlayer(this);
}
protected override void Update()
{
OnClickMouseInputEvent();
base.Update();
}
public void OnClickMouseInputEvent()
{
if (Input.GetMouseButtonDown(1))
{
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit))
{
// TODO : 이동 패킷
MoveTarget(hit.point);
}
}
else
{
if (state != PlayerState.Move)
return;
if (!_agent.pathPending)
{
if (_agent.remainingDistance <= _agent.stoppingDistance)
{
if (!_agent.hasPath || _agent.velocity.sqrMagnitude <= 0.1f)
{
// TODO : 이동 멈춤 패킷
StopMove();
}
}
}
}
}
}
protected void MoveTarget(Vector3 target)
{
_agent.SetDestination(target);
state = PlayerState.Move;
}
protected void StopMove()
{
state = PlayerState.Idle;
}
이렇게 _agnet의 dest만 설정해주면 바로 그 위치로 이동하게된다.
'Unity > 온라인 RPG' 카테고리의 다른 글
[Unity 3D] 캐릭터 공격 애니메이션 동기화 (0) | 2024.04.24 |
---|---|
[Unity 3D] 캐릭터 이동 동기화 (0) | 2024.04.23 |
[Unity 3D] 캐릭터 선택창 및 캐릭터 생성 (0) | 2024.04.13 |
[Unity 3D] Title과 Login 구현 (UI 작업, 서버 연동) (0) | 2024.04.09 |
[Unity 2D] 대형 구조 관리 - 서버 구조 개선 작업 (0) | 2024.04.02 |