1. 서브씬 체크 코드 수정
저번에 서브씬 로드할지 체크하는 코드가 조금 문제가 있어 수정해보려 합니다.

현재 구현은 카메라의 수직 좌표를 이용하고 있는 상태입니다.
그래서 실제 카메라에 그려지는 영역과 차이가 있습니다.

그래서 이렇게 그리는 영역의 중심 좌표를 기준으로 체크하도록 수정하려고 합니다.
그리는 영역을 기준으로 하면 좀 더 그럴싸하게 되겠죠..?
정확히는 화각과 실제 그리는 범위를 찾아서 더 가까운 위치로 체크하는 게 맞는데, 매 프레임 복잡한 계산을 몇 번씩 하는 게 부담되니까요.

sin(rot.x) = pos.y / dist
dist = pos.y / sin(rot.x)
float camToDrawCenterDist = cam.transform.position.y / Mathf.Sin(cam.transform.eulerAngles.x * Mathf.Deg2Rad);
Vector3 camDrawCenterPos = new Vector3(cam.transform.position.x, 0f, cam.transform.position.z);
camDrawCenterPos += camToDrawCenterDist * (Quaternion.Euler(0, cam.transform.eulerAngles.y, 0) * Vector3.forward);
해당 위치를 찾기 위해 간단하게 식을 짜 봤습니다.
수직 좌표에서 그리는 좌표까지 거리, 카메라의 방향벡터를 구해서 카메라 수직 좌표에 더해줬습니다.
2. 씬 전환 시작 지점 구현
이전에 씬을 이동시에 이전 좌표를 그대로 사용하고 있어서 어색했던 문제가 있었습니다.
그래서 이번에는 워프 때 좌표를 지정해두도록 설정해보겠습니다.
[SerializeField] string WarpSceneName;
[SerializeField] Vector3 WarpPosition;
protected override void OnEnterTarget(PlayerEntityController entity)
{
base.OnEnterTarget(entity);
SceneChanger.Instance.ChangeScene(WarpSceneName, WarpPosition);
}
이전에 만들었던 SceneTrigger_PlayerEntityWarp스크립트에 포지션 관련 코드를 추가했습니다.
ChangeScene함수로 위치를 넘겨주고, 로드가 끝날 때쯤 위치를 옮겨주도록 작업했습니다.
실제 꿈꾸는 섬에서는 문을 통해 들어가서 문을 통해 나오는 방식인데, 좀 더 리소스가 갖춰지면 좀 더 기능을 확장해보겠습니다.
3. 다음에 할 일
오늘 라이팅 관련 작업을 중심으로 진행할 예정이었는데, 제가 마지막으로 기억하는 라이팅은 오래된 버전이라 지금 추가된 새로운 기능들을 보니 눈이 휘둥그레지더군요.
그래서 꿈꾸는 섬 모작은 잠시 멈춰두고 유니티 라이팅 관련 공부부터 진행해볼까 합니다.
'개인프로젝트 일지' 카테고리의 다른 글
유니티로 "젤다의 전설: 꿈꾸는 섬" 모작 11일차 (0) | 2022.10.10 |
---|---|
유니티로 "젤다의 전설: 꿈꾸는 섬" 모작 9일차 (0) | 2022.09.25 |
유니티로 "젤다의 전설: 꿈꾸는 섬" 모작 8일차 (0) | 2022.09.25 |
유니티로 "젤다의 전설: 꿈꾸는 섬" 모작 7일차 (1) | 2022.09.19 |
유니티로 "젤다의 전설: 꿈꾸는 섬" 모작 6일차 (0) | 2022.09.12 |