Ejemplo n.º 1
0
    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;
        }
    }
Ejemplo n.º 2
0
    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));
        }
    }