본문 바로가기

프로그래밍/Unity 3D

[Unity3D] 유니티 Lerp로 부드러운 카메라 이동 구현하기 (오브젝트 추적)

[Unity3D] 유니티 Lerp로 부드러운 카메라 이동 구현하기 (오브젝트 추적)


2017/11/09 - [Unity] 유니티 3D Vector의 선형보간 Lerp 정확한 사용법


지난 게시글에서 Lerp의 사용법을 최대한 자세하게 설명드렸습니다. 이번엔 그것을 응용해서 카메라로 오브젝트를 추적하는 스크립트를 작성해 보겠습니다.


우선 이동할 2D 오브젝트를 생성해 Target이라는 이름으로 설정합니다.

이제 메인카메라에 Chasing.cs 스크립트를 하나 컴포넌트로 추가합니다.


이제 Chasing.cs 스크립트를 아래처럼 작성해주세요


using System.Collections; using System.Collections.Generic; using UnityEngine; public class Chasing : MonoBehaviour { public GameObject Player; private GameObject Target; public float CameraZ = -10; // Update is called once per frame     void FixedUpdate () { Vector3 TargetPos = new Vector3(Target.transform.position.x, Target.transform.position.y, CameraZ); transform.position = Vector3.Lerp(transform.position, TargetPos, Time.deltaTime * 2f); } }


CameraZ는 Inspector 창에서 지정해줘도 괜찮습니다. 그리고 하이라키 뷰에서 Target 오브젝트를 Chasing 스크립트의 Target로 끌어옵니다.

현재 오브젝트의 z 축 position이 0이기 때문에 -10으로 설정했습니다.


그리고 Update는 FixedUpdate함수를 사용했습니다. Update와 LateUpdate 함수는 매 프레임마다 호출되지만 FixedUpdate는 프레임에 영향을 받지 않고 호출됩니다. Update와 LateUpdate 함수에서 오브젝트와 카메라를 동시에 이동할 경우 오브젝트가 덜덜 떨리는 현상을 보실 수 있을겁니다.


먼저 새로운 Vector3 TargetPos를 선언하여 타겟의 x,y 좌표와 카메라의 z좌표를 넣었습니다. 그후 그 좌표로 카메라의 position을 보정합니다.

이렇게 까지 완성하고 오브젝트의 이동까지 구현하셨다면 이제 카메라가 부드럽게 오브젝트를 추적합니다.




Lerp함수에 대한 해석은 지난 게시글을 참고해주세요~~!


감사합니다.


2017/11/09 - [Unity] 유니티 3D Vector의 선형보간 Lerp 정확한 사용법