[Basic] 카메라



카메라 컴포넌트에 대해 알아보자.

image

카메라 컴포넌트는 다음과 같이 생겼다. 순서대로 프로퍼티를 살펴보자.

Clear Flag

이 프로퍼티의 항목을 열어보면

image

위와 같은 항목들이 나온다.

Solid Color

Solid Color는 카메라 컴포넌트의 프로퍼티 중 Background의 색상으로 여백을 채운다.

Depth only

Depth only는 여백을 투명하게 만든다.

Don’t Clear

Don’t Clear는 여백을 투명하게 만드는데, 이번에 있던 프레임을 지우지 않게다는 뜻이다. 그럼 잔상이 남게 된다. 실행결과를 보자.

image

다음과 같이 말이다.

Culling Mask

Culling Mask는 내가 선택한 레이어만 보여주는 프로퍼티이다.

Projection

Projection은 원근감을 주기 위한 컴포넌트 이다. 이 프로퍼티를 Orthographic으로 바꾸면 원근감이 사라진다.

Perspective는 주로 3D에서 사용하고 Orthographic은 2D에서 사용한다고 보면 된다.

Clipping Planes

Clipping Planes는 Near와 Far가 있는데 그 거리에 있는 것은 보여주지 않겠다는 것이다. 기본값으로 Near에 0.3 Far에1000이 있는데 카메라와 거리가 0.3이거나 1000이면 거기서부터는 짤려서 보여진다.

Viewport Rect

Viewport Rect는 보통 미니맵을 구현할 때 사용되곤 한다. 즉, 카메라가 찍고있는 시점을 옮길 때 사용한다.

쉽게 알아보기 위해서 카메라 오브젝트를 하나 더 만들고 그 카메라의 Viewport Rect를 수정해보자.

image

다음과 같이 카메라 오브젝트를 하나 더 만들고 그 카메라 오브젝트의 Viewport Rect를 다음과 같이 수정하면 그 카메라 오브젝트가 찍고있는 시점을 화면상에서 옮기는게 가능하다.

Depth

Depth 이 프로퍼티는 우선순위를 결정한다. 카메라 오브젝트가 여러개 일 때 우선순위를 정해줘서 게임 화면에 보여준다. 현재는 메인 카메라와 메인 카메라1이 우선순위가 -1로 같은데 그렇다면 하이어라키 창에서 아래로 내려갈수록 우선순위가 높아진다. 메인 카메라1의 우선순위를 메인 카메라보다 낮게 설정하면 게임화면에 메인 카메라1이 찍고있는 화면은 보이지 않게 된다. 여기서 사용할 수 있는 기법이 나온다, 예를들어 플레이어가 적 감지 스킬을 사용한다고 생각하면 장애물에 가려진 적이 화면상에 보여야 한다. 그 때 이 Depth프로퍼티와 Culling Mask,Clear Flag의 Deoth Only를 사용한다. 방법을 설명하겠다.

적 감지 스킬

우선 메인카메라1의 Viewport Rect를 원래대로 돌리고,

image

다음과 같이 적으로 설정한 오브젝트를 바닥아래로 옮겨서 보이지 않게 만든다. 그다음 메인카메라1의 설정을 다음과 같이 바꾼다 Clear Flags를 Depth only로 여백을 투명하게 만들고 Culling Mask를 Enemy레이어만 화면에 보이게 하면 다음과 같이 된다.

image

바닥 아래에 있던 레이어를 Enemy로 설정해두었던 오브젝트가 보이게 된다. 즉 플레이어가 적 감지 스킬을 사용하면 메인카메라1을 활성화해서 안보이던 적을 보이게하는 식으로 사용하면 된다.

Occlusion Culling

Occlusion Culling은 예를들어 카메라가 현재 보고 있는 방향에서 반대쪽을 보게 되면 화면에 보이는게 아무것도 없을 것이다. 그 때 원래 있던 오브젝트들을 보이지 않게 하는 것이다. 즉 카메라 오브젝트가 보고 있는 것들만 렌더링 해서 사용자에게 보여주겠다는 것이다. 이렇게되면 런타임 성능을 향상시킬 수 있다.

Allow HDR

Allow HDR은 조명효과 이다. 어두우면 더 어둡게 밝으면 더 밝게 해준다.


이정도면 프로퍼티는 대부분 설명한 것 같다. 이제 스크립트에서 카메라가 특정 대상을 따라다니도록 설정해보겠다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    [SerializeField]
    private GameObject target; //카메라가 따라 갈 오브젝트

    [SerializeField]
    private float speed; //카메라가 따라 갈 속도

    private Vector3 offset; //카메라와 따라 갈 오브젝트와의 거리
    void Start()
    {
        offset=transform.position-target.transform.position;
    }

    void Update()
    {
        //카메라의 위치를 계속해서 수정
        //Vector3.Lerp(어디서 , 어디까지 , 얼마의 비율로)
        //Lerp는 선형보간법을 사용한다 예를들어 0에서 50까지 0.5의 비율로라고 하면 25를 반환한다.
        //이러면 한번에 이동하는게 아니기 때문에 좀 더 부드럽게 움직이게 연출이 가능하다.
        //아래코드는 현재 위치에서 타겟위치에서 offset만큼 떨어진 거리까지 speed비율로 따라가게 된다.
        transform.position=Vector3.Lerp(transform.position, target.transform.position+offset, speed); 
    }
}





© 2022. by KSC

Powered by sora