Unity에서 포털 시스템 만들기

포털은 많은 게임에서 인기 있는 기능으로, 플레이어가 서로 다른 장소 사이를 원활하게 순간이동할 수 있게 해줍니다. 이 튜토리얼에서는 Unity에서 포털 시스템을 만드는 다양한 기술을 살펴보겠습니다. 기본적인 순간이동, 시각적 포털에 렌더 텍스처 사용, 플레이어 방향과 모멘텀을 유지하는 포털 메커니즘 구현에 대해 다루겠습니다.

프로젝트 설정

시작하려면 기본 Unity 프로젝트를 설정해 보겠습니다.

  1. 새로운 Unity 프로젝트를 만듭니다.
  2. 스크립트를 정리하기 위해 Scripts라는 이름의 새 폴더를 추가합니다.
  3. 플레이어 캐릭터와 두 개의 포털 객체를 포함한 몇 가지 기본 객체로 새로운 3D 장면을 만듭니다.

기본 순간이동

포털 시스템의 가장 간단한 형태는 기본 순간이동으로, 플레이어가 한 장소에서 다른 장소로 즉시 이동할 수 있습니다.

순간이동 스크립트 생성

using UnityEngine;

public class TeleportationPortal : MonoBehaviour
{
    public Transform destination;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            other.transform.position = destination.position;
            other.transform.rotation = destination.rotation;
        }
    }
}

이 스크립트를 두 포털 객체에 연결하고 대상을 해당 포털에 할당합니다.

시각적 포털에 렌더 텍스처 사용

더욱 몰입감 있는 포털 시스템을 만들려면 렌더 텍스처를 사용하여 포털 반대편에 무엇이 있는지 보여줄 수 있습니다.

렌더 텍스처 설정

  1. 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 만들기 > 렌더 텍스처를 선택하여 새 렌더 텍스처를 만듭니다.
  2. 이를 반복하여 두 번째 렌더 텍스처를 만듭니다.
  3. 포털마다 하나씩, 장면에 두 개의 새 카메라를 만들고 각 카메라에 렌더 텍스처를 할당합니다.
  4. 포털의 목적지에 맞게 카메라의 위치를 ​​설정합니다.

렌더 텍스처 적용

using UnityEngine;

public class Portal : MonoBehaviour
{
    public Camera portalCamera;
    public Material portalMaterial;

    void Start()
    {
        portalMaterial.mainTexture = portalCamera.targetTexture;
    }
}

이 스크립트를 각 포털에 연결하고 해당 포털 카메라와 재질에 렌더 텍스처를 할당합니다.

플레이어 방향 및 모멘텀 유지

포털 시스템을 더욱 현실적으로 만들려면 플레이어가 포털을 통과할 때 방향과 운동량을 유지해야 합니다.

강화된 순간이동 스크립트

using UnityEngine;

public class EnhancedPortal : MonoBehaviour
{
    public Transform destination;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            CharacterController playerController = other.GetComponent();
            Rigidbody playerRigidbody = other.GetComponent();

            // Disable the CharacterController to allow manual position and rotation updates
            if (playerController != null)
            {
                playerController.enabled = false;
            }

            // Maintain orientation
            Vector3 relativePosition = destination.InverseTransformPoint(other.transform.position);
            other.transform.position = destination.TransformPoint(relativePosition);

            // Maintain momentum
            if (playerRigidbody != null)
            {
                Vector3 relativeVelocity = destination.InverseTransformDirection(playerRigidbody.velocity);
                playerRigidbody.velocity = destination.TransformDirection(relativeVelocity);
            }

            // Re-enable the CharacterController
            if (playerController != null)
            {
                playerController.enabled = true;
            }
        }
    }
}

이 스크립트를 각 포털에 연결하고 해당 목적지를 할당합니다.

포털 시스템 테스트

포털 시스템을 테스트하려면 다음 단계를 따르세요.

  1. 플레이어 캐릭터를 포털 중 하나 근처에 배치하세요.
  2. 게임을 실행하려면 재생를 누르세요.
  3. 플레이어 캐릭터를 포털로 옮겨 순간이동과 시각 효과를 관찰하세요.

결론

Unity에서 포털 시스템을 만드는 다양한 기술을 탐구했습니다. 기본적인 순간이동으로 시작하여 렌더 텍스처를 사용하여 시각적 포털을 추가하고 플레이어 방향과 모멘텀을 유지하도록 시스템을 개선했습니다. 이러한 개념은 특정 게임 프로젝트의 요구 사항에 맞게 더욱 확장하고 사용자 정의할 수 있습니다.