예제 #1
0
        static private IEnumerator SimulateAnchorPos(RectTransform inTransform, Runtime inRuntime)
        {
            Vector3 currentPos;
            Vector3 deltaPos;
            float   dt, dt2, damp;

            while (inRuntime.Duration > 0)
            {
                dt   = Routine.DeltaTime;
                dt2  = dt * dt;
                damp = inRuntime.Damping == 0 ? 1 : TweenUtil.LerpDecay(inRuntime.Damping, 1, dt);

                deltaPos.x = deltaPos.y = deltaPos.z = 0;
                VectorUtil.Add(ref deltaPos, inRuntime.Velocity, dt);
                VectorUtil.Add(ref deltaPos, inRuntime.Acceleration, 0.5f * dt2);
                VectorUtil.Add(ref deltaPos, inRuntime.Gravity, 0.5f * dt2);

                currentPos = inTransform.anchoredPosition3D;
                VectorUtil.Add(ref currentPos, deltaPos);

                inTransform.anchoredPosition3D = currentPos;

                VectorUtil.Add(ref inRuntime.Velocity, inRuntime.Acceleration, dt);
                VectorUtil.Add(ref inRuntime.Velocity, inRuntime.Gravity, dt);
                VectorUtil.Multiply(ref inRuntime.Velocity, damp);

                inRuntime.Duration -= dt;

                if (inRuntime.Callback != null)
                {
                    inRuntime.Callback(inTransform, currentPos, inRuntime.Velocity);
                }
                yield return(null);
            }
        }
        static private IEnumerator Simulate(Transform inTransform, Runtime inRuntime)
        {
            Vector3 currentEuler = inTransform.GetRotation(Axis.XYZ, inRuntime.Space);
            Vector3 deltaEuler;
            float   dt, dt2, damp;

            while (inRuntime.Duration > 0)
            {
                dt   = Routine.DeltaTime;
                dt2  = dt * dt;
                damp = inRuntime.Damping == 0 ? 1 : TweenUtil.LerpDecay(inRuntime.Damping, 1, dt);

                deltaEuler.x = deltaEuler.y = deltaEuler.z = 0;
                VectorUtil.Add(ref deltaEuler, inRuntime.Velocity, dt);
                VectorUtil.Add(ref deltaEuler, inRuntime.Acceleration, 0.5f * dt2);

                VectorUtil.Add(ref currentEuler, deltaEuler);

                inTransform.SetRotation(currentEuler, Axis.XYZ, inRuntime.Space);

                VectorUtil.Add(ref inRuntime.Velocity, inRuntime.Acceleration, dt);
                VectorUtil.Multiply(ref inRuntime.Velocity, damp);

                inRuntime.Duration -= dt;

                if (inRuntime.Callback != null)
                {
                    inRuntime.Callback(inTransform, currentEuler, inRuntime.Velocity);
                }

                yield return(null);
            }
        }