コード例 #1
0
        private IEnumerator <float> MoveCardCoroutine(CardComponent card, Vector3 targetPostion, Vector3 forwardDirection, float speed)
        {
            var time          = 0f;
            var startRotation = card.transform.rotation;
            var startPosition = card.transform.position;

            var duration = (targetPostion - startPosition).magnitude / speed;

            if (duration < float.Epsilon)
            {
                yield break;
            }

            var targetRotation = Quaternion.LookRotation(forwardDirection, card.transform.up);

            while (time <= duration)
            {
                var t = _Settings.MoveCurve.Evaluate(time / duration);

                card.transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t);
                card.transform.position = Vector3.Lerp(startPosition, targetPostion, t);

                time += Time.deltaTime;
                yield return(Timing.WaitForOneFrame);
            }

            card.transform.rotation = targetRotation;
            card.transform.position = targetPostion;

            card.OnAnimationEnded();
        }
コード例 #2
0
        private IEnumerator <float> FlipCardCoroutine(CardComponent card, float duration)
        {
            var time           = 0f;
            var startRotation  = card.transform.rotation;
            var targetRotation = Quaternion.LookRotation(card.transform.forward, card.IsCovered ? Vector3.up : Vector3.down);

            while (time <= duration)
            {
                var t = _Settings.FlipCurve.Evaluate(time / duration);
                card.transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t);
                time += Time.deltaTime;

                yield return(Timing.WaitForOneFrame);
            }

            card.transform.rotation = targetRotation;

            card.OnAnimationEnded();
        }