안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.
오늘은 GPT-4, GPT-4o 활용해서 GPT-4, GPT-4o 활용해서 카메라 줌 인 구현해볼께요.
[오늘의 목표]GPT-4, GPT-4o 활용해서 카메라 줌 인 구현
※ ChatGPT 답변 내용 중 제가 별도로 표시한 파란색 내용을 기준으로 읽으시면 좀 더 이해가 쉽게 될거예요.
카메라 줌 인 설정
Lost Crypt - 2D Sample Project에서 하는 방식으로 카메라 줌 인을 만들어볼게요.
아래와 같이 CM VCam 을 2개를 만들고 Far 는 활성화 시켜요. 그리고 CM VCam - Near 는 비활성화해요.
설정 방법 등은 아래 글을 참고하세요.
2024.04.22 - [디지털노마드] - [5분개발] ChatGPT를 활용하여 플레이어 이동 방향에 따라 카메라 이동
2024.04.23 - [디지털노마드] - [5분개발] ChatGPT를 활용하여 카메라의 움직임을 제한하기
CM VCam - Far 는 게임이 시작될 때 카메라 영역을 설정해요.(Ortho Size : 10)
CM VCam - Near 는 줌 인 효과가 나타날 수 있게 Ortho Size 를 4.5로 설정해요.
이제 카메라 줌 인 효과를 발생 시키는 트리거를 만들면 되요.
플레이어가 박스 콜리더 안에 있으면 줌 인 효과가 발생되게 스크립트를 만들어요.
[스크립트]
using UnityEngine;
public class ObjectActivator : MonoBehaviour
{
[SerializeField] string activatorTag = null;
[SerializeField] bool deactivateOnExit = false;
[SerializeField] GameObject[] objects = null;
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag(activatorTag))
{
foreach (var obj in objects)
obj.SetActive(true);
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (deactivateOnExit && collision.CompareTag(activatorTag))
{
foreach (var obj in objects)
obj.SetActive(false);
}
}
}
줌인 효과 확인하기
이제 변경 사항을 저장하고 실행해보면 아래와 같이 줌인 효과를 볼 수 있어요.
설정 과정이 조금 까다롭지만 Lost Crypt - 2D Sample Project 를 참고하시면 쉽게 설정할 수 있어요.
그리고 아래는 줌 인을 구현하기 위한 방법을 정리했어요. 물론 챗GPT가 해줬어요.
이번 글은 줌 인 구현 방법 중 Cinemachine을 통한 구현이였어요.
카메라를 점차 플레이어로 줌인하는 기술은 일반적으로 "카메라 줌 인(Zoom In)" 또는 "카메라 돌리(Tracking Shot)"로 불립니다. 이 기술은 게임과 영화에서 모두 사용되며, 특정 대상(플레이어 또는 특정 오브젝트)에 점진적으로 초점을 맞추기 위해 사용됩니다. 게임 개발에서는 이러한 줌 인 효과를 구현하기 위해 다양한 기술과 도구를 사용할 수 있습니다.
카메라 줌 인(Zoom In) 기술
- 정의: 카메라 줌 인은 카메라 렌즈의 초점 거리를 변화시켜 시야각(FOV)을 좁히고, 대상이 화면에서 더 크게 보이도록 하는 기술입니다.
- 용도: 플레이어의 중요한 행동이나 이벤트를 강조하고, 몰입감을 높이기 위해 사용됩니다.
게임 개발에서 카메라 줌 인 구현
- Cinemachine을 사용한 구현: Unity의 Cinemachine 패키지를 사용하면 쉽게 카메라 줌 인 효과를 구현할 수 있습니다.
- CinemachineVirtualCamera: Follow와 Look At을 플레이어로 설정합니다.
- Lens Settings: Field of View를 점차 줄여줌으로써 줌 인 효과를 만듭니다.
- Dolly Track: 카메라가 이동하면서 줌 인 효과를 주기 위해 사용할 수 있습니다.
- DOTween을 사용한 구현: Unity에서 DOTween 같은 트위닝 라이브러리를 사용하여 카메라의 속성(예: FOV, 위치)을 애니메이션할 수 있습니다.
using DG.Tweening; using UnityEngine; public class CameraZoom : MonoBehaviour { public Camera mainCamera; public float zoomDuration = 2f; public float targetFOV = 30f; void Start() { // 카메라의 Field of View를 targetFOV로 줌 인 mainCamera.DOFieldOfView(targetFOV, zoomDuration); } }
예제 시나리오
- 플레이어가 특정 이벤트를 활성화할 때: 플레이어가 특정 위치에 도달하거나 이벤트를 활성화할 때 카메라가 줌 인하여 플레이어에게 초점을 맞춥니다.
- 보스 전투 시퀀스: 보스 전투가 시작될 때 카메라가 줌 인하여 보스와 플레이어의 긴장감을 높입니다.
- 중요한 오브젝트 강조: 특정 중요한 오브젝트나 단서를 플레이어가 발견할 때 카메라가 줌 인하여 이를 강조합니다.
요약
카메라 줌 인 기술은 플레이어의 중요한 순간을 강조하고 게임의 몰입감을 높이는 데 사용됩니다. Unity에서 이러한 효과를 구현하기 위해서는 Cinemachine과 같은 카메라 제어 도구나 DOTween과 같은 트위닝 라이브러리를 사용할 수 있습니다. 이를 통해 자연스럽고 다이나믹한 카메라 움직임을 구현할 수 있습니다.
아래 코드를 통해서도 줌 인 기능이 구현이 가능한데 실제 적용은 다음에 해볼께요.
using UnityEngine;
using Cinemachine;
public class OrthoCameraZoom : MonoBehaviour
{
public CinemachineVirtualCamera virtualCamera;
public float targetOrthoSize = 5f; // 목표 Orthographic Size 값
public float zoomDuration = 2f; // 줌 인 지속 시간
private void Start()
{
// 초기 Orthographic Size 값 저장
float initialOrthoSize = virtualCamera.m_Lens.OrthographicSize;
// Orthographic Size 값을 점진적으로 줄임
StartCoroutine(ZoomInCoroutine(initialOrthoSize, targetOrthoSize, zoomDuration));
}
private IEnumerator ZoomInCoroutine(float initialOrthoSize, float targetOrthoSize, float duration)
{
float elapsed = 0f;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
virtualCamera.m_Lens.OrthographicSize = Mathf.Lerp(initialOrthoSize, targetOrthoSize, elapsed / duration);
yield return null;
}
// 최종적으로 목표 Orthographic Size 값으로 설정
virtualCamera.m_Lens.OrthographicSize = targetOrthoSize;
}
}
오늘은 GPT-4, GPT-4o 활용해서 GPT-4, GPT-4o 활용해서 카메라 줌 인 구현해봤어요.
지금까지,
언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.
감사합니다.
'디지털노마드' 카테고리의 다른 글
[챗GPT게임개발43] GPT-4, GPT-4o 활용해서 Unity에서 애니메이션과 게임 로직 통합을 위한 개념 이해 (2) | 2024.06.03 |
---|---|
[챗GPT게임개발42] GPT-4, GPT-4o 활용해서 Unity Timeline에서 Cinemachine 클립 간의 부드러운 전환 설정 방법 (3) | 2024.05.31 |
[챗GPT게임개발39] GPT-4, GPT-4o 활용해서 Shader 생성하기 (34) | 2024.05.28 |
[챗GPT게임개발38] GPT-4, GPT-4o 활용해서 Shader Graph 분석하기 (2) | 2024.05.28 |
[챗GPT게임개발37] GPT-4, GPT-4o 활용해서 Rigidbody 2D 속성 살펴보기 (2) | 2024.05.27 |