상세 컨텐츠

본문 제목

카메라(Camera)

유니티/기능

by MJ_119 2024. 6. 25. 22:41

본문

Background Type 속성

  1. Solid Color (단색):
    • 카메라의 배경을 단색으로 설정합니다.
    • Background 속성에서 색상을 선택할 수 있습니다.
    • 주로 간단한 배경이 필요한 경우 사용됩니다.
  2. Skybox (스카이박스):
    • 환경에 스카이박스를 사용합니다.
    • 스카이박스는 6면으로 이루어진 큐브 형태의 텍스처로, 하늘이나 배경을 표현하는 데 사용됩니다.
    • Lighting 설정에서 스카이박스를 설정할 수 있습니다.
  3. Uninitialized (초기화되지 않음):
    • 카메라가 렌더링하기 전에 배경을 초기화하지 않습니다.
    • 이 옵션을 사용하면 이전 프레임의 잔여물이 남을 수 있으므로, 특정 효과를 구현하기 위해 사용될 수 있습니다.

 

 

 

 

Projection 속성

1. Perspective (원근 투영)

원근 투영은 인간의 눈과 유사한 방식으로 장면을 투영합니다. 가까운 물체는 더 크게, 먼 물체는 더 작게 보이는 효과를 줍니다. 이는 깊이감과 현실감을 더해주기 때문에 3D 게임과 애플리케이션에서 자주 사용됩니다.

  • Field of View (FOV): 카메라의 시야각을 설정합니다. 이 값은 카메라가 가로 방향으로 얼마나 넓은 범위를 볼 수 있는지를 결정합니다. 일반적으로 60도에서 90도 사이로 설정됩니다.
  • Clipping Planes: 카메라가 렌더링할 수 있는 최소 및 최대 거리를 설정합니다. Near는 카메라에 가장 가까운 렌더링 거리, Far는 가장 먼 렌더링 거리를 의미합니다.
    • Near: 카메라에서 가장 가까운 렌더링 거리를 설정합니다.
    • Far: 카메라에서 가장 먼 렌더링 거리를 설정합니다.

2. Orthographic (직교 투영)

직교 투영은 물체의 거리에 상관없이 동일한 크기로 보이게 하는 투영 방식입니다. 이는 깊이감이 없기 때문에 2D 게임이나 특정한 3D 게임 및 애플리케이션에서 사용됩니다.

  • Size: 카메라의 뷰에서 세로 방향으로 볼 수 있는 월드 유닛의 절반을 설정합니다. 예를 들어, 이 값을 5로 설정하면 카메라는 총 10 유닛 높이의 영역을 볼 수 있습니다.
  • Clipping Planes: 원근 투영과 마찬가지로, Near와 Far 값을 설정하여 카메라가 렌더링할 수 있는 최소 및 최대 거리를 설정합니다.

 

Viewport Rect 속성

Viewport Rect 속성은 X, Y, W, H 네 개의 값으로 구성됩니다. 각각의 의미는 다음과 같습니다:

  • X: 뷰포트의 왼쪽 경계가 화면의 왼쪽 경계로부터 얼마나 떨어져 있는지를 나타냅니다. 값은 0에서 1 사이의 범위로 설정됩니다.
  • Y: 뷰포트의 아래쪽 경계가 화면의 아래쪽 경계로부터 얼마나 떨어져 있는지를 나타냅니다. 값은 0에서 1 사이의 범위로 설정됩니다.
  • W (Width): 뷰포트의 너비를 나타냅니다. 값은 0에서 1 사이의 범위로 설정됩니다.
  • H (Height): 뷰포트의 높이를 나타냅니다. 값은 0에서 1 사이의 범위로 설정됩니다.

 

 

- depth only와 culling mask를 사용해서 벽뒤에있는 적들을 감지하는 스킬을 구현할 수 있음.

 

 

메인카메라가 특정 오브젝트(캐릭터) 따라가기

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class Test : MonoBehaviour
{
    [SerializeField]
    private GameObject go_Target;

    [SerializeField]
    private float speed;

    private Vector3 difValue;

    private void Start()
    {
        difValue = transform.position - go_Target.transform.position;
        difValue = new Vector3(Mathf.Abs(difValue.x), Mathf.Abs(difValue.y), Mathf.Abs(difValue.z));
    }
    void Update()
    {
        this.transform.position = Vector3.Lerp(this.transform.position, go_Target.transform.position + difValue, speed);
    }

}

 

 

 

Vector3.MoveTowards를 사용한 코드

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class Test : MonoBehaviour
{
    [SerializeField]
    private GameObject go_Target;

    [SerializeField]
    private float speed = 1.0f; // 기본 속도 값 설정

    private Vector3 difValue;

    private void Start()
    {
        if (go_Target == null)
        {
            Debug.LogError("Target GameObject is not assigned.");
            return;
        }

        difValue = transform.position - go_Target.transform.position;
    }

    void Update()
    {
        if (go_Target == null) return;

        Vector3 targetPosition = go_Target.transform.position + difValue;
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
    }
}

 

관련글 더보기