IEnumerator DoMoveCardTo(CardRegion region, Vector3 targetPosition, bool visible) { // if (!isAnimating) { isAnimating = true; Vector3 fromPos = this.transform.position; Vector3 toPos = targetPosition; Vector3 middlePos = (fromPos + toPos) / 2 + Vector3.up * 5; Vector3 fromRot = this.transform.localEulerAngles; Vector3 toRot = visible ? new Vector3(0, 0, 0) : new Vector3(0, 0, 180); float animationDuration = 0.25f; float delta = Time.deltaTime / animationDuration; for (float t = 0; t < 1f; t += delta) { if (t < 0.5f) { this.transform.position = Vector3.Lerp(fromPos, middlePos, t * 2); } else { this.transform.position = Vector3.Lerp(middlePos, toPos, t * 2 - 1); } this.transform.localEulerAngles = Vector3.Lerp(fromRot, toRot, t); yield return(new WaitForEndOfFrame()); } this.transform.position = toPos; this.transform.localEulerAngles = toRot; isAnimating = false; } }
public void MoveTo(CardRegion region, Vector3 localPosition) { this.region = region; Vector3 targetPosition = region.transform.TransformPoint(localPosition); if (Vector3.Distance(this.transform.position, targetPosition) > 0.1f) { StopCoroutine(DoMoveCardTo(region, targetPosition, visible)); StartCoroutine(DoMoveCardTo(region, targetPosition, visible)); } }