본문 바로가기
디지털노마드

[챗GPT게임개발40] GPT-4, GPT-4o 활용해서 카메라 줌 인 구현하기

by 인텔리노마드라이프 2024. 5. 29.
728x90

안녕하세요. 인텔리원스튜디오(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를 활용하여 플레이어 이동 방향에 따라 카메라 이동

 

[5분개발] ChatGPT를 활용하여 플레이어 이동 방향에 따라 카메라 이동

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다. 이번 시간에는 CinemachineVirtualCamera를 사용해서플레이어의 이동 방향에 따라 카메라가 따라가도록 설정하는 방법을 살펴보려고 해요.   Cine

intellinomadlife.tistory.com

2024.04.23 - [디지털노마드] - [5분개발] ChatGPT를 활용하여 카메라의 움직임을 제한하기

 

[5분개발] ChatGPT를 활용하여 카메라의 움직임을 제한하기

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.이번 시간에는 Cinemachine Confiner 컴포넌트에 대해 알아볼까해요.Cinemachine Confiner, 카메라의 움직임을 제한하는 역할 아래와 같이 ChatGPT에게 질

intellinomadlife.tistory.com

 

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)을 좁히고, 대상이 화면에서 더 크게 보이도록 하는 기술입니다.
  • 용도: 플레이어의 중요한 행동이나 이벤트를 강조하고, 몰입감을 높이기 위해 사용됩니다.

게임 개발에서 카메라 줌 인 구현

  1. Cinemachine을 사용한 구현: Unity의 Cinemachine 패키지를 사용하면 쉽게 카메라 줌 인 효과를 구현할 수 있습니다.
    • CinemachineVirtualCamera: Follow와 Look At을 플레이어로 설정합니다.
    • Lens Settings: Field of View를 점차 줄여줌으로써 줌 인 효과를 만듭니다.
    • Dolly Track: 카메라가 이동하면서 줌 인 효과를 주기 위해 사용할 수 있습니다.
  2. 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);
    }
}

 

예제 시나리오

  1. 플레이어가 특정 이벤트를 활성화할 때: 플레이어가 특정 위치에 도달하거나 이벤트를 활성화할 때 카메라가 줌 인하여 플레이어에게 초점을 맞춥니다.
  2. 보스 전투 시퀀스: 보스 전투가 시작될 때 카메라가 줌 인하여 보스와 플레이어의 긴장감을 높입니다.
  3. 중요한 오브젝트 강조: 특정 중요한 오브젝트나 단서를 플레이어가 발견할 때 카메라가 줌 인하여 이를 강조합니다.

요약

카메라 줌 인 기술은 플레이어의 중요한 순간을 강조하고 게임의 몰입감을 높이는 데 사용됩니다. 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)입니다.

감사합니다.

728x90