Unity3D) Vector3.Lerp()
* 선형보간이란?
위키백과, 우리 모두의 백과사전.
선형 보간법(線型補間法, linear interpolation)은 끝점의 값이 주어졌을 때 그 사이에 위치한 값을 추정하기 위하여 직선 거리에 따라 선형적으로 계산하는 방법.
쉽게말해, 선형보간이란 내가 어떠한 위치좌표에서 어떠한 도착좌표까지 이동하면서 한번에 이동하지않고
천천히(=부드럽게) 움직이면서 이동한다를 의미한다.
* 유니티에서의 선형보간
- Mathf.Lerp() => 숫자에서의 선형보간을 의미
- Vecter2.Lerp() => Vecter2에서의 선형보간을 의미
- Vecter3.Lerp() => Vecter3에서의 선형보간을 의미
- Quaternion.Lerp() => Quaternion에서의 선형보간을 의미
- Quaternion : 회전을 표현하기 위해 사용
https://docs.unity3d.com/kr/530/ScriptReference/Quaternion.html
Unity - 스크립팅 API: Quaternion
쿼터니언은 작지만, 짐벌 락(gimbal lock)에 걸리지 않고, 쉽게 보간될 수 있습니다. 유니티는 내부적으로 쿼터니언을 모든 회전을 포현하기 위해 사용합니다. 쿼터니언은 복잡한 수를 기반으로 하
docs.unity3d.com
* Lerp()
- 오브젝트를 부드럽게 이동 or 회전하도록 하기위해 사용
- ex) 인게임내 카메라시점에 사용 / 캐릭터 이동or회전에 사용
<실제 프로젝트에서 쓰인 코드>
private void Update()
{
if (photonView.IsMine)
// 캐릭터가 local인 경우
{
v = inputVec.GetVerticalValue();
// inputVec(JoyStickControll)으로부터 수직이동값을 가져온다
h = inputVec.GetHorizontalValue();
// inputVec(JoyStickControll)으로부터 수평이동값을 가져온다
Vector3 moveDir = (Vector3.right * h) + (Vector3.up * v);
// 이동방향을 의미하는 변수
playerTransform.Translate(moveDir * Time.deltaTime * speed);
// player의 위치를 옮기는 메서드
// player의 이미지 좌우반전 관련
if (h > 0)
// 캐릭터가 오른쪽(h의 값이 양수)으로 이동할 때
{
this.gameObject.transform.localScale = new Vector2(5.0f, 5.0f);
this.playerAnim.SetBool("isMove", true);
this.playerAnim.SetBool("isIdle", false);
}
else if (h < 0)
// 캐릭터가 왼쪽(h의 값이 음수)으로 이동할 때
{
this.gameObject.transform.localScale = new Vector2(-5.0f, 5.0f);
this.playerAnim.SetBool("isMove", true);
this.playerAnim.SetBool("isIdle", false);
}
else
// 캐릭터의 움직임이 0일 때(=가만히 있는 상태)를 의미
{
this.playerAnim.SetBool("isMove", false);
this.playerAnim.SetBool("isIdle", true);
}
}
else
{
playerTransform.position = Vector3.Lerp(playerTransform.position, currPos, Time.deltaTime * 10.0f);
}
}
Vecter3.Lerp(위치 1, 위치 2, 0) => 위치1 반환
Vecter3.Lerp(위치 1, 위치 2, 1) => 위치2 반환한다.
Update()내에서 선형보간(Lerp)를 사용할 수 있다.
단, MonoBehavior를 상속받아야 사용할 수 있다.