static Vector3 Lerp(Vector3 from, Vector3 to, float t);
구조로 이루어져 있으며, 두 벡터(from, to) 사이의 시간에 따른 위치를 구할 때 사용됩니다.
위 그림에 나온 것처럼 Lerp() 함수안에 시작벡터와 목표벡터를 넣고, 마지막 인자에는 0.0~1.0 사이의 값을 넣는데 이 값이 0.0 = 0%, 1.0 = 100% 라고 생각하시면됩니다. 위 그림처럼 0.5를 넣으면 50%니 시작벡터와 목표벡터의 중간에 있는 벡터값이 나오게 되고, 0.0은 0%니 시작벡터가 1.0은 100%니 목표벡터가 나오게 됩니다. 이를 이용해서 한 템포 늦게 플레이어를 따라가는 카메라를 구현한 예제입니다.
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour
{
public GameObject playerObject = null;
public float cameraTrackingSpeed = 0.2f;
private Vector3 lastTargetPosition = Vector3.zero;
private Vector3 currentTargetPosition = Vector3.zero;
private float currentLerpDistance = 0.0f;
void Start ()
{
// Set the initial camera positioning to prevent any weird jerking
// around
Vector3 playerPos = playerObject.transform.position;
Vector3 cameraPos = transform.position;
Vector3 startTargetPos = playerPos;
lastTargetPosition = startTargetPos;
currentTargetPosition = startTargetPos;
currentLerpDistance = 1.0f;
}
void LateUpdate ()
{
trackPlayer ();
// Continue moving to the current target position
currentLerpDistance += cameraTrackingSpeed;
transform.position = Vector3.Lerp (lastTargetPosition, currentTargetPosition, currentLerpDistance);
}
void trackPlayer ()
{
// Get and store the current camera position, and the current player position, in world coordinates.
Vector3 currentCamPos = transform.position;
Vector3 currentPlayerPos = playerObject.transform.position;
if (currentCamPos.x == currentPlayerPos.x && currentCamPos.y == currentPlayerPos.y) {
// Positions are the same - tell the camera not to move, then abort.
currentLerpDistance = 1f;
lastTargetPosition = currentCamPos;
currentTargetPosition = currentCamPos;
return;
}
// Reset the travel distance for the lerp
currentLerpDistance = 0f;
// Store the current target position so we can lerp from it
lastTargetPosition = currentCamPos;
// Store the new target position
currentTargetPosition = currentPlayerPos;
}
}
Lerp() 함수의 시작벡터에 현재 카메라 위치를 목표벡터에 현재 플레이어 위치를 넣고, 마지막 인자(currentLerpDistance)에는 프레임마다 카메라 추적 속도(0.2)를 누적해서 더해준 값을 넣어, 프레임마다 20%씩 카메라가 플레이어를 따라잡게 됩니다. 5프레임이 지나면 currentLerpDistance는 1.0이 되어 유저와 카메라의 위치가 같아지게 되고, currentLerpDistance의 값이 0f로 초기화 됩니다.
0 개의 댓글:
댓글 쓰기