}

유니티 MIRROR(거울) 구현하는 방법

Mirror 세팅하기

etc-image-0etc-image-1etc-image-2
계층 구조를 잘 봐주세요 

빈오브젝트를 하나 생성해 준 다음, 빈오브젝트 자식으로 quad를 하나 생성해 줍니다.

스케일(Size : x , y)을 9: 16으로 설정해 주고 Scale을 줄여줍니다.

etc-image-3etc-image-4
스케일을 줄인 후 Sclae.x값에 -를 붙여준다

줄이고 난 후에는 "좌우반전"을 위해 x값에 -1을 곱해줍니다.


Render Texture 만들기

 

유니티 Render Texture에 대해

Render Texture을 만들면 Dimension, Size, Anti-aliasing, Enable Compatible Format, Color Format, Depth Stencil Format, Enable Mip Maps, Dynamic Scaling, Wrap Mode, Filter Mode가 존재하는 것을 확인할 수 있습니다. 이것들에 대해 간단

wlsdn629.tistory.com

Render Texture에 대한 자세한 내용은 위 포스팅을 참고하시면 되겠습니다.

 

 


etc-image-5etc-image-6
Render Texture 

Render Texture를 하나 만들어줍니다.

Size를 아까 위에서 9:16으로 맞췄으므로, 그에 맞는 "1080 x1920" 비율로 Size(해상도)를 설정해 줍니다.


etc-image-7etc-image-8
에디터 버전에 따라 Base Map 혹은 Albedo로 불립니다

Render Texture용 Material을 하나 만들어준 후 메테리얼의 Base Map에 아까 만든 Render Texture을 넣어줍니다,


etc-image-9

아까 만든 Quad의 메테리얼에 지금 만든 Mateiral을 넣어줍니다.

 

 

 


카메라 세팅

etc-image-10

부모의 자식으로 Camera을 하나 만들어줍니다.
이때 카메라의 바라보는 방향은 거울비출 배경바라보고 있어야 합니다.

etc-image-11
비추고 싶은 배경

Local 좌표계가 위 사진처럼 되어 있으면 됩니다.

etc-image-12etc-image-13
버전에 따라 Output Texture 혹은 Target Texture로 되어 있습니다

카메라의 Output Texture에 아까 만든 Render Texture을 넣어주면 됩니다.

etc-image-14etc-image-15
Culling Mask 

이때, 카메라가 오브젝트에 가려진다면 카메라의 Culling Mask를 설정해 주면 됩니다.


결과

etc-image-16


카메라가 비추는 각도를 조정하는 스크립트

거울이 한 곳만 비추는 것이 아닌 각도에 따라 다른 각도의 상이 거울에 생기게 하기 위해, 다음 코드를 통해 해결할 수 있습니다.

using UnityEngine;

public class MirrorTest : MonoBehaviour
{
    public Transform player;
    public Transform mirror;

    private void Update()
    {
        Vector3 localPlayer = mirror.InverseTransformPoint(player.position);
        transform.position = mirror.TransformPoint(new Vector3(localPlayer.x, localPlayer.y, -localPlayer.z));


        Vector3 localMirror = mirror.TransformPoint(new Vector3(-localPlayer.x, localPlayer.y, localPlayer.z));
        transform.LookAt(localMirror);
    }
}