/// <summary>
/// 회전 없이 유도 이동만 하는 함수
/// </summary>
/// <param name="_trTarget">목표 지점</param>
/// <param name="_v3CurrentDirection">현재 오브젝트가 이동할 방향</param>
/// <returns></returns>
IEnumerator Move_Guided(Transform _trTarget, Vector3 _v3CurrentDirection)
{
Transform trTarget = _trTarget;
Vector3 v3TargetDirection = (trTarget.position - this.transform.position).normalized;
Vector3 v3CurrentDirection = _v3CurrentDirection;
if (v3CurrentDirection == Vector3.zero)
{
v3CurrentDirection = v3TargetDirection;
}
float fLookSpeed = 7f;
float fMoveSpeed = 50f;
float fAccumTime = 0f;
while (0.01f < (this.transform.position - trTarget.position).sqrMagnitude)
{
// Rotate
v3TargetDirection = (trTarget.position - this.transform.position).normalized;
v3CurrentDirection = Vector3.RotateTowards(v3CurrentDirection, v3TargetDirection, Time.deltaTime * fLookSpeed, 0f);
v3CurrentDirection = v3CurrentDirection.normalized;
// Translate
fAccumTime += Time.deltaTime * fMoveSpeed;
this.transform.localPosition += (v3CurrentDirection * fAccumTime);
yield return null;
}
yield return null;
// 도착했으면 Destroy or Recycle
}
보통 유도 기능 만들때 오브젝트 자체를 회전시키고, transform.forward 방향으로 Translate만 하면 됐는데
이번에는 유도 기능으로 이동만 하고 회전하지 않게 하기 위해서
Direction Vector를 따로 두고 Vector3.RotateTowards()를 사용해서 이동하게 만들었다.
P.s. 적당히 테스트 한거니 더 이쁘게 만들고 싶은분은 직접 수정 및 테스트 해보세요.
[참조] https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html