[내일배움캠프 휴일차] 어떻게든 쿼터뷰를 만들겠다는 몸부림
1. 오늘의 할 일
(하고싶었던 일)
제발 상호작용 제발제발 만들자 좀 제발 제발 제발(싹싹싹싹)
2. (눈물의) 작업 개시🛠️
일단 내 프로젝트의 목표는 다음과 같다.
1. Isometric 으로 쿼터뷰를 만들고 싶다.
2. 그런데 건물 뒤로 들어가면 플레이어를 가리고 싶다.
왜? : 그것이 쿼터뷰의 장점이니까....
결과물:
참고로 해당 건물들은 에셋이 아니며, 오롯이 Unity 자체의 2D 오브젝트로 만들었다. (Square와 Isometric 등...)
각 건물에 개별 Collider를 부착하고, 그다음 OrderLayer를 변화시킬 Collider를 추가했다.
즉,
콜라이더 1: 충돌판정 용. Player 캐릭터가 건물을 통과하지 못하도록 만든다.
콜라이더 2: Player의 Order in Layer를 변화시키는 용도.
IsTrigger를 True로 만들고, OnTriggerStay를 이용해, 해당 콜라이더 범위에 들어가면 건물의 Order in Layer보다 1 낮은 수치로 Player의 레이어를 설정한다. 반대로 다시 나왔을 때(OnTriggerExit), 플레이어의 Order in Layer를 본래의 수치로 복구시킨다.
얻게되는 효과: 2D오브젝트로 만들어냈지만, 마치 3D와 같은 효과를 만들어낼 수 있다. 특히 Polygon Collider를 이용하여 내가 효원하는 효과를 볼 수 있도록 조절이 가능했다.
2. 씬 전환
포탈에 들어가면 씬을 바꾸고 싶다!
근데 포탈마다 새 스크립트를 넣을 수는 없다.
그래서 씬 로더와 Potal에 달 스크립트를 만들었다. (이후 게임매니저 관할로 기능 변경함)
방법은 다음과 같다.
1. SceneLoader 스크립트를 만든다. (static 클랙스)
그럼 저기서 SceneName을 받아와야한다. (LoadSceneMode.Single을 이용해 기존씬을 내리고 새로운 씬을 불러옴)
2. Potal 스크립트를 만든다
지금은 게임매니저로 옮기고 들어갔던 위치에 스폰시키기 위하여 밑에 추가적인 스크립트가 더 있는데, 상관없이 저 방법만 쓸 거라면 이것만 있으면 된다.
구조
Potal 기능을 할 곳에 Potal 스크립트를 넣어둔다.
상호작용 스크립트는 Player에게 있다.
Potal 스크립트가 들어있는 오브젝트가 플레이어의 IsTrigger 콜라이더와 접촉하면 해당 오브젝트의 Potal.cs를 부른다.
씬 로더를 이용해 포탈에 등록된 씬 이름을 그대로 불러와 연결해준다.
장점: 스크립트 하나로 모든 포탈에 다 쓸 수 있다.
단점: 이름을 정확하게 입력해둬야한다.
이후 각 포탈간 이동이 가능하도록 아래와 같이 구성했다.
해당 포탈에 각각 이름을 지정하여, 포탈에 적어둔 이름으로 캐릭터를 스폰하게 된다.
그렇게 로직을 짰는데...
발생한 문제
1. 캐릭터가 스폰 위치에 있지 않음 - Debug로그를 확인하자, 캐릭터가 스폰된 후, 씬에있는 본래 위치로 이동하는 걸 확인(Debug.Log가 1회만 출력되는 게 정상인 조건문에서, 2회 출력됨)
: 플레이어 캐릭터를 Prefab으로 변경하고 씬에서 제거. 대신 씬이 로드 될 때 Player를 Instance하도록 변경.
2. 1로 수정하자, 이번에는 카메라가 따라오지 못하는 상황.
-플레이어 프리팹을 카메라와 연결해야함.
FollowCamera 스크립트에 SetTarget() 메서드 생성
1에서 Instance한 캐릭터를 씬을 로드할 때 호출.
적용한 결과, 무사히 잘 작동하는 것을 확인할 수 있다.
비록 철문 상호작용에서는 만족스러운 만큼 적용되고 있지 않지만. 그래도 처음의 문제보다는 훨씬 나아진 상태임을 확인할 수 있다.
3. 마무리
현재 상호작용에 대한 부분은 어느정도 완료되었으므로, 이후의 요소 및 포탈 추가는 어렵지 않을 것이다.
이제 필요한 나머지 요소는 꾹꾹 채워넣어 완성하는 일만 남았다....