반응형
1. 카메라가 플레이어 쳐다보게 하기
01 Define.cs에 CamerMode 설정
public class Define
{
public enum CameraMode
{
QuaterView,
}
}
02 변수 설정
[SerializeField]
Define.CameraMode _mode = Define.CameraMode.QuaterView;
[SerializeField]
Vector3 _delta = new Vector3(0.0f, 6.0f, -5.0f);
[SerializeField]
GameObject _player = null;
_delta : 카메라의 위치를 플레이어 위치에서 얼마나 떨어져 배치할지
03 QuaterView setting
public void SetQuaterView(Vector3 delta)
{
_mode = Define.CameraMode.QuaterView;
_delta = delta;
}
04 매 프라임마다 카메라가 플레이어를 따라 이동하도록 설정
void Update()
{
transform.position = _player.transform.position + _delta;
transform.LookAt(_player.transform);
}
Update 문에 있으면 문제가 되는 이유
Player 둘다 업데이트 문에 있으므로 누가 먼저 업데이트 됐는지 몰라서 덜덜 떨려보인다.
해결방법
LateUpdate()사용하면된다. 그러면 Player Update 된 후 이동하기 떄문에 문제가 해결된다.
void LateUpdate()
{
if (_mode == Define.CameraMode.QuaterView)
{
transform.position = _player.transform.position + _delta;
transform.LookAt(_player.transform);
}
}
3. 마우스로 캐릭터 이동 지점 설정
01 ScreenPointToRay를 통해 도착지점 설정
void OnMouseClicked(Define.MouseEvent evt)
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0F, Color.red, 1.0f);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Wall")))
{
_destPos = hit.point;
_moveToDest= true;
}
}
그림 참조
4. 플레이어 이동
01 이동 방향 설정
방향 벡터 = 도착 위치 - 플레이어 이동방향
Vector3 dir = _destPos - transform.position;
02 도착했는지 확인
1) 도착했을 경우
magnitude을 이용해서 도착 여부를 알 수 있다. 이는 벡터의 크기를 나타내는데 이게 0.001보다 작으면 도착했다고 간주한다.
if(dir.magnitude<0.001f) // 목적지 도착(magnitude = 벡터의 크기)
{
_moveToDest = false;
}
2) 도착하지 않았을 경우
플레이어 이동시키기
else
{
float moveDist = Mathf.Clamp(_speed*Time.deltTime,0,dir.magnitude);
transform.position += dir.normalized * moveDist;
transform.rotation = Quaternion.Slerp(tranform.rotation, Quaternion.LookRotation(dir), 10*Time.deltaTime);
transform.LookAt(_destPos);
}
참고 : 본 내용은 MMORPG PART3 강의를 수강하여 작성하였습니다.
https://www.inflearn.com/course/mmorpg-%EC%9C%A0%EB%8B%88%ED%8B%B0/dashboard
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - Bind event, Extension Method (0) | 2023.02.22 |
---|---|
Unity - UI 자동화(Bind, Get) (0) | 2023.02.21 |
Unity - Raycast, 좌표계, LayerMask, Tag (0) | 2023.02.19 |
Unity - UI 기초, UI Rect Transform, Anchor Presets 설명 (0) | 2023.02.15 |
Unity - KeyFrame Animation(Key, Dope Sheet, Curves),Animation Event (0) | 2023.02.15 |
댓글