행복한 하루
[Unity] Virtual Camera로 3D 객체를 코딩 없이 카메라로 따라가기 (Smooth Follow) 본문
[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 |
---|