행복한 하루

[Unity] Virtual Camera로 3D 객체를 코딩 없이 카메라로 따라가기 (Smooth Follow) 본문

Unity/Programming

[Unity] Virtual Camera로 3D 객체를 코딩 없이 카메라로 따라가기 (Smooth Follow)

변화의 물결 2023. 4. 10. 00:04

 

 

안녕하세요.

 

 유니티에서 3D 물체를 카메라가 따라가게 하려면 Script를 만들어서 거리 등 속성을 조절해서 작업(이전 내용 [Unity] SmoothFollow.cs 가 없는 경우)을 하거나 Main Camera를 물체 안으로 넣어서 간단하게 작업할 수 있었습니다.

그런데 Virtual Camera를 설치하면 간단하게 카메라가 물체를 따라 움직이는 것을 확인할 수 있으며 기타 설정 기능이 있어서 거리 각도 등을 조절할 수 있습니다.

 간단하게 보면 Main Camera를 지시할 수 있는 카메라 감독자가 한 명을 고용한다고 생각하면 됩니다.


1. 사전 준비

  - Virtual Camera를 시험해 보기 위해서 물체가 움직이는 환경을 간단하게 만들어 보아야 합니다. 그래서 아주 간단하게 바닥에 공이 굴러가는 것을 만들어 놓습니다.

 

1.1 생성할 내용

  - 폴더 : Project 창에서 Assets 폴더 내에서 오른쪽 버튼 -> Create Folder

    (Material, Script 생성)

  - 바닥: Hierarchy 창에서 오른쪽 버튼 -> 3D Object -> Plane 생성

    (Inspector 창에서 Scale X=3, Y=1, Z=3 , 이름을 Ground로 변경)

  - Material : Material 폴더에서 오른쪽 버튼 -> Create -> Material

   (Inspector 창에서 Main Maps에서 색상 등 변경)

  - 공: Hierarchy 창에서 오른쪽 버튼 -> 3D Object -> Sphere 생성

    (Inspector에서 생성한 Material을 선택, Add Component 클릭해서 Rigidbody 추가, 이름을 Ball로 변경)

  - 공 Script : Script 폴더에서 오른쪽 버튼 -> Create -> C# Script

 (Ball 객체에 다가 드래그 앤 드롭으로 추가)

  

1.2 C# Script 작성

  - 키보드 방향키로 공이 움직이는 로직입니다. 속도를 변경할 수 있도록 변수로 만들었습니다.

  - Lerp함수를 사용해서 서서히 멈추는 것처럼 작동하게 합니다. (선형 보간이라는 수학용어가 나오는데 여기서는 넘어가도록 하겠습니다.)   

public class BallScript : MonoBehaviour
{
    private Rigidbody rigidbody;
    public float BallSpeed = 6f;

    private void Awake()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        Vector3 speed = new Vector3()

        if (Input.GetKey(KeyCode.LeftArrow))
            speed.x -= BallSpeed;
        if (Input.GetKey(KeyCode.RightArrow))
            speed.x += BallSpeed;
        if (Input.GetKey(KeyCode.UpArrow))
            speed.z += BallSpeed;
        if (Input.GetKey(KeyCode.DownArrow))
            speed.z -= BallSpeed;

        rigidbody.velocity = Vector3.Lerp(rigidbody.velocity, speed, Time.deltaTime);
    }
}

 

  - 카메라 움직임 없이 공만 움직이는 것을 볼 수 있습니다.

2. Virtual Camera 설치

  - 상단 메뉴 -> Window -> Package Manager 선택

  - Package Manager 메뉴 중 Packages를 눌러 Unity Registry 선택

 

  - Packages 목록 중-> Cinemachine -> Install 클릭

 

  - 아래와 같이 에러 발생한다면, Unity 상단에 있는 Sign in에서 다시 Sign out 한 다음 다시 로그인 후 설치하시면 됩니다.

 

  - 설치가 진행이 되고, 완료가 되면, install 버튼이 Remove 버튼으로 변경됩니다. 그다음 Package Manager 창을 닫습니다.

3. Virtual Camera 사용해 보기

  - Hierarchy 창에서 + 클릭 -> Cinemachine -> Virtual Camera 선택

 

  - CM vcam1이 생성된 것을 확인할 수 있습니다. 그리고 Main Camera에도 CinemachineBrain 컴포넌트가 추가되어 있습니다.

  - CM vcam1에의 Follow와 Look At에 공 객체(Ball)를 드래그 앤 드롭 혹은 선택합니다.

  - 실행을 해보면 공이 회전하기 때문에 카메라가 좌우로 왔다 갔다 합니다. 그래서 추가적인 설정을 해줍니다.

  - Body 메뉴 -> Binding Mode를 Lock To On Assign 선택합니다. 그리고 Follow Offset의 Z 값을 0으로 바꿔 줍니다.

 

  - 실행하면 1인칭 주인공 시점처럼으로 보입니다.

 

  - Follow Offset의 Y, Z 축 값을 대충 -4, 1.5로 바꿔 주면 1인칭 관찰자 시점처럼 외부에서 공을 졸졸 따라다니면서 외부를 공 주위를 보면서 움직일 수 있습니다. Game 창으로 맞추고 값을 바꿔 가며 사용자자에게 적당한 카메라 위치를 맞춥니다.

4. 추가 설정

  - 자세히 움직임을 보면 화면이 미세하게 끊기는 증상을 볼 수 있습니다. 이것은 메인 카메라의 업데이트 설정이 필요한 것으로 촬영하는 객체가 물리에 기반하기 때문에 카메라도 그것에 맞게 업데이트를 해주어야 합니다.

 

  - Main Camera -> CinemachineBrain -> Update Method에서 Fixed Update로 선택해 줍니다. 그리고 다시 실행해 보면 끊어짐 없이 부드럽게 이동하는 것을 확인할 수 있습니다.

 

 감사합니다.

 

 

<참고 사이트>

1. 다시 돌아온 공 굴리기 기초강좌 B1 리메이크, 켠 김에 배포까지

https://www.youtube.com/watch?v=BYyqoDqgPFg

 

 

'Unity > Programming' 카테고리의 다른 글

[Unity] SmoothFollow.cs 가 없는 경우  (0) 2022.01.18
Comments