[Unity] 회전 없이 유도(Guided/Homing) 이동 로직
Unity3D/Script / 2020. 5. 26. 14:23
/// <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
반응형
'Unity3D > Script' 카테고리의 다른 글
데이터 압축(SharpZip) (0) | 2020.08.11 |
---|---|
[링크] Unity 자이로 & 가속도 센서 관련 (0) | 2020.06.09 |
[펌] Unity 런타임 중 AndroidManifest.xml에서 meta-data 정보 읽어오기. (0) | 2019.12.04 |
[펌] Is there an isPlaying() type function for Animator (0) | 2019.11.13 |
[펌] PostProcessing iOS Activate Background Mode for Push Notifications (0) | 2019.06.04 |