| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 서포터즈
- 개발
- 픽셀아트
- layer
- COSMO
- 드로잉
- 에이세프라이트
- 자원순환보증금관리센터
- 연습
- 스마일게이트
- 반환원정대
- pixel art
- 모작
- 드로잉 연습
- 인디게임 개발
- 애니메이션
- 픽셀 아트
- 노하우
- menu
- TOOL
- Pixelart
- 도트
- 멋쟁이사자처럼
- 포토샵
- Aseprite
- 기초
- 도트공부
- 장학팀
- photoshop
- 채색
- Today
- Total
소소한 나의 하루들
맵 이동 & 카메라 좌표 조정 본문
맵 이동 구현과 함께 카메라 좌표를 조정해보았다.
사실 카메라 좌표 조정이 주 목적이었는데, 아이작과 같은 게임 특성 상 맵 이동과 크게 연관되어있는 부분이다보니 하나씩 구현해보게 됐다.
지난 여름에 (카메라 좌표계 등등 기초부터) 시도하다가 벽을 느끼고 중단했던 시스템인데 이번에 다시한번 구현해보게 되었다.
카메라 좌표를 어떻게 조정해야할까? 생각해본 방법으로는 2가지가 있었는데
1. 하나의 Scene에서 Stage 별로 필요한 오브젝트들을 몰아넣고, 맵 이동 시마다 필요한 Stage 오브젝트 활성화/비활성화 처리
→ Stage 별로 카메라 영역을 따로 설정해줘야했고, Stage가 활성화될 때마다 동시에 조작해야하는 기준 카메라가 있다보니 여러 개의 카메라를 만들어줘야하는 문제.. 따라서 카메라 하나를 갖고 맵 이동 시 필요한 플레이어 위치로 이동하도록 해보려고 했으나 카메라 좌표 조작이 생각보다 어려워서 중단했다.
2. 맵을 기준삼아 여러 Scene으로 나눠서 맵이 로드될 때 새로운 Scene이 활성화되고, 필요 시 카메라가 자연스럽게 플레이어를 기준으로 따라오게 설정
→ 이게 가장 복잡하지않고 자연스러운 방법이라고 생각했다. 활성화된 Scene 하나에서 동작하기에 위 방법처럼 Stage 별 여러 개의 카메라 (혹은 하나의 카메라로 복잡한 좌표이동까지 고려)가 있을 필요가 없었고, 기본적으로는 맵에 카메라 영역 제한을 두고 큰 맵이 등장하더라도 Scene 자체의 카메라 영역만 설정해주면 카메라가 플레이어를 따라가면서 스크린에 보여질 수 있게 할 수 있을 것 같았다.
따라서 2번째 방법으로 결정했다.
다만 Scene 간 맵 생성이다보니, 맵 이동 시 보여지는 연출(방 이동 모션)이라던가, 랜덤으로 전체 맵과 그 위치에 해당하는 방을 생성하는 부분 구현이 꽤 복잡할 것 같은데 한번 해보고 상황을 봐서 선택적으로 1번째 방법으로 전환한다거나 하는 여러 해결방안을 열심히 고민해봐야 할 것 같다.
Scene 하나 당 맵(방) 하나를 로드하는 방식으로는 맵 간 이동 시 로딩 딜레이가 발생하게 된다. 아무래도 방을 이동할 때마다 딜레이가 발생하게되면 유저 입장에서 피곤함과 지루함을 크게 느낄 것 같아서 어떤 이유에서든 딜레이 발생요소는 최소화하는 것이 좋다고 판단된다. 따라서 여러 방을 포함하는 스테이지 하나 당 Scene 하나를 로드하는 방식으로 진행하는 방식으로 전환하기로 했다.
*오브젝트 또는 씬 등에 의한 로딩 딜레이는 로딩화면이나 기타 연출 등으로 가리는 것이 일반적인데, 어떻게 하면 좋을지 고민해봐야겠다. (Cinemachine을 활용하여 멀티 카메라 시스템을 설정하고, 방마다 할당하는 방식이 괜찮을까)



아이작의 맵 이동에 따른카메라 움직임을 보면, 일반적인 작은 방에서는 카메라 좌표가 고정된 상태로 플레이어가 움직여도 맵 바깥으로 카메라가 움직인다거나 하지 않는 것을 확인할 수 있고, 랜덤으로 생성되는 큰 방에서는 플레이어를 따라 카메라는 움직이지만 마찬가지로 카메라가 맵 바깥으로 벗어나지 않는 것을 확인할 수 있다.
따라서 방법2에 따라 시스템 구현 우선순위를 정해보면,
1-1) 카메라가 맵 바깥을 벗어나지 않도록 경계 구역 설정 [추후 확인 필요]
→멀티 카메라 시스템 구현 전에 랜덤 맵 생성부터 진행해야 로딩 연출 등 진행이 가능할 것 같다.
*다른 글에서 다뤄볼 예정 [링크 첨부]
1-2) 큰 맵의 경우 플레이어를 따라 카메라가 움직임과 동시에 경계구역을 벗어나지 못하게 설정 [구현 완료]
→ 하지만, 추후 랜덤 맵 생성과 같은 로직을 구현할 때 조정해야할 필요가 있을 것 같다.
2) 플레이어가 문에 도달했을 때 다른 맵으로 카메라 전환
→이때 카메라 움직임을 고려해서 구현해봐야할 것 같다.

(1-2)의 경우 Cinemachine을 활용하여 경계구역을 설정할 수 있었다. 하지만 Pixel Perfect Camera로 인해 Orthographic Size가 고정되기 때문에 (1-1) 작은 방의 경우처럼 맵 중앙에 카메라를 고정시키는 것은 살짝 문제가 있다. '설정한 Reference에 따라 현재 유니티 개발화면에서 보이는 것처럼 오브젝트가 잘리지 않고 정상적으로 보여질 것인가'가 관건인데, 그래서 확인해보고 Cinemachine Camera를 선택적으로 비활성화하거나 기타 맵 중앙에 고정시키는 등의 방법을 시도할 것이다.
이번 문제의 주요 원인은 바로 Pixel Perfect Camera였다. 이것에 대해서 여기서 한번에 다루면 글이 너무 길어질 것 같아 직접 시도하고 검색해보면서 알게된 내용을 아래 글에 정리해보았다.
2025.01.19 - [개발/유니티] - Pixel Perfect Camera에 대해서
여기서 고생을 많이 했다. 할말은 정말 많지만 위의 글과 아래의 요약으로 대신하겠다.
1. game 화면에서 오브젝트들이 잘리지 않고 온전히 화면을 가득 채우길 원했지만, 오브젝트가 조금씩 화면 위아래로 잘리는 문제
→ Pixel Perfect Camera가 Reference Resolution을 보정하여 자동으로 Orthographic Size를 고정시키기 때문에 발생하는 문제인 것으로 확인했다. 아마 90% 이상 높은 확률로 추후 이것으로 인한 문제는 발생하지 않을 것으로 예상된다. 하지만 프로토 타입 버전 개발 후 Reference Resolution을 반영하여 화면에 보여지는지, 오브젝트 컷팅 문제가 없는지 확인해야할 것 같다.
2. 카메라가 비추는 경계 영역을 설정하기위해 cinemachine camera와 cinemachine confiner 2D 옵션으로 polygon collider 2D 경계를 설정하려 했다. 그러나 카메라의 스크린 사이즈(= 즉 Orthographic Size)가 어쩔 수 없이 작은 전체 오브젝트의 크기로 인해 polygon collider 2D 크기보다 더 커져서 카메라 경계가 정상적으로 작동하지 않는 문제
→Pixel Perfect Camera로 인해 Orthographic Size가 고정되었고, 해당 값을 Cinemachine에도 동일한 값을 입력하여 해결하였다.
'개발 > 게임개발' 카테고리의 다른 글
| Grid Cell Coordinate(격자 셀 좌표) <->World Coordinate(월드 좌표) 변환 (0) | 2025.05.21 |
|---|---|
| 랜덤 맵 시스템 개발 (0) | 2025.05.06 |
| 플레이어 이동 구현 : Sub-State Machine 활용(Animator) (0) | 2025.01.23 |
| 프로젝트 재시작 : 스프라이트 PPU 변경하기 (0) | 2025.01.20 |
| (아이작라이크 혹은 팬게임이 될지모를) 첫 게임 개발 프로젝트 01. [프로젝트명 : 미정] (0) | 2025.01.06 |