##게임 개발의 중간단계에 작성한 글이므로 플레이어의 설정을 한번 보여주고 글을 작성하겠음.
유니티 주차에 들어서면서 '게더' 라는 타일맵을 만드는 개인과제를 시작했다.
그중 필수요구사항에 카메라가 플레이어를 따라가게 만드는 작업이 있는데
처음에는 Main Camera를 Player(gameObject)안에 넣으면 되는 단순한거 라고
생각하고 실제로도 문제없이 잘 작동했다.
근데 내배캠 동기분이 확장성을 생각하면 다른 방식을 사용하는게 좋다고 말해 주셔서
그분의 블로그에 있는 패키지매니저 - 시네머신을 사용하기로 했다.
지금은 Remove로 되어있는데 처음엔 Install로 되어있으니 눌러서 적용시키면 된다.
Install 이 완료되면 Hierarchy창에 우클릭 눌르면 Cinmachine이라고 뜨고
나는 그중 Virtual Camera를 이용해 작업했다.
버추얼 카메라(Virtual Camera)를 만들고 Inspector창을 보면 CinmachineVirtualCamera라는 컴포넌트가 있고
그중 Follow에 Player(gameObject)를 넣어주면 카메라가 플레이어를 잘 따라다닌다.
그리고 Main Camera를 보면 CinmachineBrain이 생기는걸 확인할 수 있다.
이것 외의 다른 활용 방법은 아래의 블로그를 참고 하면 된다.
https://jhoon8903.github.io/unity/2023/11/25/1-followCam.html [ 출처 : 다니엘의 개발 기록 ]
그리고 다른 동기의 블로그를 봤는데 카메라의 영역이 있고 영역을 넘어갈때 카메라가 전환되는
연출을 하신걸 보고 나도 한번 해봐야겠다 싶어서 많은 시행착오 끝에 만들어 낸 결과물이다.
우선 경계 설정을 위해 각 구역에 방을 만들고 Collider 2D를 설정 해줬다.
Collider에 들어있는 Is Tirgger 체크박스를 눌러준다.
그리고 각 방마다 버추얼 카메라를 만들어 넣어주고 시작지역이 아닌 다른 곳은
Inspector 창에 있는 이름 옆에 체크박스를 꺼두었다.
각각의 버추얼 카메라에 Add Extension을 눌러서 Cinmachine Confiner을 추가해주고
Bounding Shape에 설정해준 방(Room1~4)을 넣어주면 각 카메라에 영역이 만들어진다.
참고로 각 방의 콜라이더(Collider)는 Polygon Collider 2D를 하는게 좋다?
어디서 본진 모르겠는데 인식이 안되는 콜라이더가 있다고 한다.
특별한 경우가 아니라면 폴리곤(Polygon) 쓰자.
여기까지 설정 했다면 이제 스크립트를 하나 만들면 된다.
일단 이글의 처음 부분에 플레이어의 인스펙터창을 보여줬는데
Collider에 있는 Is Tirgger를 체크하지 않은 이유는 충돌감지를
원하는 두 객체중 하나만 체크해도 되고, 플레이어에 있는 Is Tirgger를
체크하면 모든 Collider를 무시해버리기때문에 만들어둔 방 밖으로 나가진다.
그리고 플레이어의 Tag 부분을 Player로 지정한 상태에서 코드를 작성했다.
암튼 이어서 콜라이더 간의 충돌 감지는 1.Collision, 2.Trigger 방식이 있는데
2로 해야 그 영역안으로 들어갈 수 있기때문에 Trigger를 이용해 작업했다.
관련 설명은 좋은 블로그 많으니 알아서 둘러보길 권한다.
using Cinemachine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class MoveCam : MonoBehaviour
{
public GameObject virtualCam;
private void OnTriggerEnter2D(Collider2D other) //영역과 충돌시 발생하는 코드
{
if (other.gameObject.tag == "Player") //플레이어와 충돌 감지
{
virtualCam.SetActive(true); //해당 카메라 ON
}
}
private void OnTriggerExit2D(Collider2D other) //영역 밖으로 나갈때 발생하는 코드
{
if (other.gameObject.tag == "Player") //플레이어와 충돌 감지
{
virtualCam.SetActive(false); //해당 카메라 OFF
}
}
}
작성한 코드를 gameObject(Room1~4)에 잘 넣어주고 만들어둔 VirtualCam에 해당 카메라를 넣어주면 끝~
오랜시간 고민하고 정보 수집해서 결국 만들긴 했는데 결국 유로 에셋구매하면 코드한줄없이 만들 수 있는 기능이다.
하지만 알고 있는 것들로 응용해서 만들어보고 싶었고 해냈다.
누군가 이 글을 본다면 부담없이 가져가서 잘 이용해서 좋은 게임 만들어줬으면 좋겠다고 생각한다.
'Today I Learned' 카테고리의 다른 글
[내일배움캠프] Unity 게임 개발 입문 - 개인 프로젝트 마감 (0) | 2023.11.29 |
---|---|
[내일배움캠프] Unity 게임 개발 입문 - 개인과제 제출전날 (수정완) (1) | 2023.11.28 |
[내일배움캠프] C# 문법 종합반 - 팀 해산 및 새로운 팀 결성 (1) | 2023.11.24 |
[내일배움캠프] C# 문법 종합반 - 팀프로젝트 마무리 (2) | 2023.11.23 |
[내일배움캠프] C# 문법 종합반 - 팀프로젝트 완성(소감문) (2) | 2023.11.22 |