| using UnityEngine; | 
| using System.Collections; | 
| using System; | 
|   | 
| public class SmoothMove : MonoBehaviour | 
| { | 
|   | 
|     Vector3 targetPosition = Vector3.zero; | 
|     float smoothTime = 0f; | 
|     bool isLocal = false; | 
|     Action callBack = null; | 
|   | 
|     Vector3 refPosition = Vector3.zero; | 
|     bool startSmooth = false; | 
|   | 
|     public static float checkDistance = 0.01f; | 
|   | 
|     public static void MoveTo(GameObject _gameObject, Vector3 _targetPosition, float _smoothTime, bool _isLocal, Action _callBack) | 
|     { | 
|         SmoothMove smove = _gameObject.AddMissingComponent<SmoothMove>(); | 
|         smove.MoveTo(_targetPosition, _smoothTime, _isLocal, _callBack); | 
|     } | 
|   | 
|     public void MoveTo(Vector3 _targetPosition, float _smoothTime, bool _isLocal, Action _callBack) | 
|     { | 
|   | 
|         targetPosition = _targetPosition; | 
|         smoothTime = _smoothTime; | 
|         isLocal = _isLocal; | 
|         callBack = _callBack; | 
|   | 
|         startSmooth = true; | 
|     } | 
|   | 
|     private void LateUpdate() | 
|     { | 
|         if (!startSmooth) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (isLocal) | 
|         { | 
|             if (Vector3.Distance(this.transform.localPosition, targetPosition) > checkDistance) | 
|             { | 
|                 Vector3 newPosition = Vector3.SmoothDamp(this.transform.localPosition, targetPosition, ref refPosition, smoothTime); | 
|                 this.transform.localPosition = newPosition; | 
|             } | 
|             else | 
|             { | 
|                 this.transform.localPosition = targetPosition; | 
|                 if (callBack != null) | 
|                 { | 
|                     callBack(); | 
|                     callBack = null; | 
|                 } | 
|                 Destroy(this); | 
|             } | 
|         } | 
|         else | 
|         { | 
|             if (Vector3.Distance(this.transform.position, targetPosition) > 0.01f) | 
|             { | 
|                 Vector3 newPosition = Vector3.SmoothDamp(this.transform.position, targetPosition, ref refPosition, smoothTime); | 
|                 this.transform.position = newPosition; | 
|             } | 
|             else | 
|             { | 
|                 this.transform.position = targetPosition; | 
|                 if (callBack != null) | 
|                 { | 
|                     callBack(); | 
|                     callBack = null; | 
|                 } | 
|                 Destroy(this); | 
|             } | 
|         } | 
|   | 
|     } | 
|   | 
|   | 
|     void OnDisable() | 
|     { | 
|         if (callBack != null) | 
|         { | 
|             callBack(); | 
|             callBack = null; | 
|         } | 
|         startSmooth = false; | 
|     } | 
| } |