이번 포스팅에서는 #16 유니티 스폰위치, 게임 매니저(Singleton) 포스팅에이어 진행하겠습니다.
#16 유니티 스폰위치, 게임 매니저(Singleton) 포스팅은 아래에 첨부하였습니다.
포스팅은 유니티 2D 게임 개발(게임 개발 프로그래밍)에 나온 예제로 진행합니다.
카메라가 다시 플레이를 추적하도록 하겠습니다.
카메라 매니저를 만들겠습니다. 카메라 매니저 역시 RPGGameManager와 같이 싱글톤 패턴을 사용할 것입니다.
1. Assets > Scripts > Managers 폴더에 RPGCameraManger 스크립트(C#)을 생성합니다.
2. Hierarchy창 > 마우스 오른쪽 클릭 > Create Empty > RPGCameraManager 오브젝틀 생성합니다.
3. RPGCameraManager 오브젝트에 RPGCameraManger 스크립트(C#) 컴포넌트를 추가합니다.
RPGCameraMager 스크립트(C#)의 전체코드입니다.
using Cinemachine;
using UnityEngine;
public class RPGCameraManager : MonoBehaviour
{
public static RPGCameraManager sharedInstance = null;
[HideInInspector]
public CinemachineVirtualCamera virtualCamera;
void Awake()
{
if (sharedInstance != null && sharedInstance != this)
{
Destroy(gameObject);
}
else
{
sharedInstance = this;
}
GameObject vCamGameObject = GameObject.FindWithTag("VirtualCamera");
virtualCamera = vCamGameObject.GetComponent<CinemachineVirtualCamera>();
}
}
코드를 저장하고 확인하겠습니다.
public static RPGCameraManager sharedInstance = null;
[HideInInspector]
public CinemachineVirtualCamera virtualCamera;
싱글톤패턴을 사용하기 위해 static 변수인 sharedInstance를 사용하였습니다.
public을 사용하여 다른 클래스에서 사용할 수 있습니다.
시네머신 가상 카메라 참조를 저장합니다. [HideInInspector]특성을 사용하여 유니티에는 나타나지 않습니다.
Awake() 메서드입니다.
void Awake()
{
if (sharedInstance != null && sharedInstance != this)
{
Destroy(gameObject);
}
else
{
sharedInstance = this;
}
GameObject vCamGameObject = GameObject.FindWithTag("VirtualCamera");
virtualCamera = vCamGameObject.GetComponent<CinemachineVirtualCamera>();
}
if-else문은 싱글톤 패턴을 구현합니다.
현재 Scene에서 VirtualCamera 태그가 있는 게임오브젝트를 찾고 vCamGameObject에 대입합니다.
가상카메라의 모든 속성은 스크립트를 통해서 설정이 가능합니다. 가상카메라 컴포넌트를 코드를 통해 저장해두겠습니다.
카메라 매니저를 프리팹으로 만들겠습니다.
RPGGameManager 스크립트(C#)을 수정하도록 하겠습니다.
RPGGameManager 스크립트(C#)의 전체 코드입니다.
using UnityEngine;
public class RPGGameManager : MonoBehaviour
{
//수정한 부분 <-----
public RPGCameraManager cameraManager;
//------>
public static RPGGameManager sharedInstance = null;
public SpawnPoint playerSpawnPoint;
void Awake()
{
if (sharedInstance != null && sharedInstance != this)
{
Destroy(gameObject);
}
else
{
sharedInstance = this;
}
}
void Start()
{
SetupScene();
}
public void SetupScene()
{
SpawnPlayer();
}
public void SpawnPlayer()
{
if (playerSpawnPoint != null)
{
GameObject player = playerSpawnPoint.SpawnObject();
// 수정한 부분 <------
cameraManager.virtualCamera.Follow = player.transform;
// ------>
}
}
}
코드를 확인하고 저장합니다.
수정한부분은 표시해 두었습니다. 수정한 부분만 확인해 보겠습니다.
cameraManger를 public으로 작성하여 유니티에서 설정하겠습니다.
virtualCamera의 Follow 속성을 player의 transform 속성에 설정하였습니다. 이 코드가 가상 카메라가 다시 플레이어를 추적하는 코드입니다.
Hierachy창에 있는 RPGGameManager의 RPGGameManager 스크립트 컴포넌트의 Camera Manager 속성에 RPGCameraManger 인스턴스를 드래그 앤 드롭합니다.
1. Tag & Layers 에서 VirtualCamera 태그를 추가합니다.
2. CM vcam1(가상카메라) 오브젝트를 선택하고 VirtualCamera 태그를 설정합니다.
재생버튼을 눌러 게임을 진행합니다.
카메라가 다시 플레이어를 따라다니는 것을 볼 수 있습니다.
마지막으로 Ctrl + S를 눌러 Scene을 저장합니다!
감사합니다! :)
'유니티2D' 카테고리의 다른 글
#19 유니티 OnCollisionEnter2D , OnCollisionExit2D (3) | 2020.12.22 |
---|---|
#18 유니티 코루틴(Coroutine), Character 보강 (7) | 2020.12.21 |
#16 유니티 스폰위치, 게임 매니저(Singleton) (5) | 2020.12.18 |
#15-2 유니티 인벤토리 만들기_스크립트(C#) (0) | 2020.12.17 |
#15-1 유니티 인벤토리 만들기(캔버스, UI, 텍스트) (0) | 2020.12.16 |