예제 #1
0
        // Tweening Functions - Thanks to Robert Penner and GFX47

        private static float tweenOnCurve(LTDescr tweenDescr, float ratioPassed)
        {
            // Debug.Log("single ratio:"+ratioPassed+" tweenDescr.animationCurve.Evaluate(ratioPassed):"+tweenDescr.animationCurve.Evaluate(ratioPassed));
            return tweenDescr.from.x + (tweenDescr.diff.x) * tweenDescr.animationCurve.Evaluate(ratioPassed);
        }
예제 #2
0
 private static Vector3 tweenOnCurveVector(LTDescr tweenDescr, float ratioPassed)
 {
     return new Vector3(tweenDescr.from.x + (tweenDescr.diff.x) * tweenDescr.animationCurve.Evaluate(ratioPassed),
         tweenDescr.from.y + (tweenDescr.diff.y) * tweenDescr.animationCurve.Evaluate(ratioPassed),
         tweenDescr.from.z + (tweenDescr.diff.z) * tweenDescr.animationCurve.Evaluate(ratioPassed));
 }
예제 #3
0
        /**
    * Move a GameObject through a set of points, in local space
    * 
    * @method LeanTween.moveSplineLocal
    * @param {GameObject} gameObject:GameObject Gameobject that you wish to move
    * @param {Vector3[]} path:Vector3[] A set of points that define the curve(s) ex: ControlStart,Pt1,Pt2,Pt3,.. ..ControlEnd
    * @param {float} time:float The time to complete the tween in
    * @return {LTDescr} LTDescr an object that distinguishes the tween
    * @example
    * <i>Javascript:</i><br>
    * LeanTween.moveSpline(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);<br><br>
    * <i>C#:</i><br>
    * LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);<br>
    */

        public static LTDescr moveSplineLocal(GameObject gameObject, Vector3[] to, float time)
        {
            descr = options();
            descr.spline = new LTSpline(to);

            return pushNewTween(gameObject, new Vector3(1.0f, 0.0f, 0.0f), time, TweenAction.MOVE_SPLINE_LOCAL, descr);
        }
예제 #4
0
        /**
    * Move a GameObject along a set of bezier curves, in local space
    * 
    * @method LeanTween.moveLocal
    * @param {GameObject} gameObject:GameObject Gameobject that you wish to move
    * @param {Vector3[]} path:Vector3[] A set of points that define the curve(s) ex: Point1,Handle1,Handle2,Point2,...
    * @param {float} time:float The time to complete the tween in
    * @return {LTDescr} LTDescr an object that distinguishes the tween
    * @example
    * <i>Javascript:</i><br>
    * LeanTween.move(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);<br><br>
    * <i>C#:</i><br>
    * LeanTween.move(gameObject, new Vector3[]{Vector3(0f,0f,0f),Vector3(1f,0f,0f),Vector3(1f,0f,0f),Vector3(1f,0f,1f)}).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);<br>
    */

        public static LTDescr moveLocal(GameObject gameObject, Vector3[] to, float time)
        {
            descr = options();
            if (descr.path == null)
                descr.path = new LTBezierPath(to);
            else
                descr.path.setPoints(to);

            return pushNewTween(gameObject, new Vector3(1.0f, 0.0f, 0.0f), time, TweenAction.MOVE_CURVED_LOCAL, descr);
        }
예제 #5
0
        private static LTDescr pushNewTween(GameObject gameObject, Vector3 to, float time, TweenAction tweenAction,
            LTDescr tween)
        {
            init(maxTweens);
            if (gameObject == null || tween == null)
                return null;

            tween.trans = gameObject.transform;
            tween.to = to;
            tween.time = time;
            tween.type = tweenAction;
            //tween.hasPhysics = gameObject.rigidbody!=null;

            return tween;
        }
예제 #6
0
        // LeanTween 2.0 Methods

        public static LTDescr options(LTDescr seed)
        {
            Debug.LogError("error this function is no longer used");
            return null;
        }
예제 #7
0
 private static Color tweenColor(LTDescr tween, float val)
 {
     Vector3 diff3 = tween.point - tween.axis;
     float diffAlpha = tween.to.y - tween.from.y;
     return new Color(tween.axis.x + diff3.x * val, tween.axis.y + diff3.y * val, tween.axis.z + diff3.z * val,
         tween.from.y + diffAlpha * val);
 }
예제 #8
0
        public static void update()
        {
            if (frameRendered != Time.frameCount)
            {
                // make sure update is only called once per frame
                init();

#if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5
		dtEstimated = Time.realtimeSinceStartup - previousRealTime;
		if(dtEstimated>0.2f) // a catch put in, when at the start sometimes this number can grow unrealistically large
			dtEstimated = 0.2f;
		previousRealTime = Time.realtimeSinceStartup;
#else
                dtEstimated = Time.unscaledDeltaTime;
#endif

                dtActual = Time.deltaTime;
                maxTweenReached = 0;
                finishedCnt = 0;
                // if(tweenMaxSearch>1500)
                // Debug.Log("tweenMaxSearch:"+tweenMaxSearch +" maxTweens:"+maxTweens);
                for (int i = 0; i <= tweenMaxSearch && i < maxTweens; i++)
                {

                    //Debug.Log("tweens["+i+"].toggle:"+tweens[i].toggle);
                    if (tweens[i].toggle)
                    {
                        maxTweenReached = i;
                        tween = tweens[i];
                        trans = tween.trans;
                        timeTotal = tween.time;
                        tweenAction = tween.type;

                        dt = dtActual;
                        if (tween.useEstimatedTime)
                        {
                            dt = dtEstimated;
                            timeTotal = tween.time;
                        }
                        else if (tween.useFrames)
                        {
                            dt = 1;
                        }
                        else if (tween.useManualTime)
                        {
                            dt = dtManual;
                        }
                        else if (tween.direction == 0f)
                        {
                            dt = 0f;
                        }

                        if (trans == null)
                        {
                            removeTween(i);
                            continue;
                        }
                        // Debug.Log("i:"+i+" tween:"+tween+" dt:"+dt);

                        // Check for tween finished
                        isTweenFinished = false;
                        if (tween.delay <= 0)
                        {
                            if ((tween.passed + dt > tween.time && tween.direction > 0.0f))
                            {
                                // Debug.Log("i:"+i+" passed:"+tween.passed+" dt:"+dt+" time:"+tween.time+" dir:"+tween.direction);
                                isTweenFinished = true;
                                tween.passed = tween.time;
                                // Set to the exact end time so that it can finish tween exactly on the end value
                            }
                            else if (tween.direction < 0.0f && tween.passed - dt < 0.0f)
                            {
                                isTweenFinished = true;
                                tween.passed = Mathf.Epsilon;
                            }
                        }

                        if (!tween.hasInitiliazed && ((tween.passed == 0.0 && tween.delay == 0.0) || tween.passed > 0.0))
                        {
                            tween.init();
                        }
                        if (tween.delay <= 0)
                        {
                            // Move Values
                            if (timeTotal <= 0f)
                            {
                                //Debug.LogError("time total is zero Time.timeScale:"+Time.timeScale+" useEstimatedTime:"+tween.useEstimatedTime);
                                ratioPassed = 0f;
                            }
                            else
                            {
                                ratioPassed = tween.passed / timeTotal;
                            }

                            if (ratioPassed > 1.0f)
                            {
                                ratioPassed = 1.0f;
                            }
                            else if (ratioPassed < 0f)
                            {
                                ratioPassed = 0f;
                            }
                            // Debug.Log("action:"+tweenAction+" ratioPassed:"+ratioPassed + " timeTotal:" + timeTotal + " tween.passed:"+ tween.passed +" dt:"+dt);

                            if (tweenAction >= TweenAction.MOVE_X && tweenAction < TweenAction.MOVE)
                            {
                                if (tween.animationCurve != null)
                                {
                                    val = tweenOnCurve(tween, ratioPassed);
                                }
                                else
                                {
                                    switch (tween.tweenType)
                                    {
                                        case LeanTweenType.linear:
                                            val = tween.from.x + tween.diff.x * ratioPassed;
                                            break;
                                        case LeanTweenType.easeOutQuad:
                                            val = easeOutQuadOpt(tween.from.x, tween.diff.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInQuad:
                                            val = easeInQuadOpt(tween.from.x, tween.diff.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutQuad:
                                            val = easeInOutQuadOpt(tween.from.x, tween.diff.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInCubic:
                                            val = easeInCubic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutCubic:
                                            val = easeOutCubic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutCubic:
                                            val = easeInOutCubic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInQuart:
                                            val = easeInQuart(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutQuart:
                                            val = easeOutQuart(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutQuart:
                                            val = easeInOutQuart(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInQuint:
                                            val = easeInQuint(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutQuint:
                                            val = easeOutQuint(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutQuint:
                                            val = easeInOutQuint(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInSine:
                                            val = easeInSine(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutSine:
                                            val = easeOutSine(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutSine:
                                            val = easeInOutSine(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInExpo:
                                            val = easeInExpo(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutExpo:
                                            val = easeOutExpo(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutExpo:
                                            val = easeInOutExpo(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInCirc:
                                            val = easeInCirc(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutCirc:
                                            val = easeOutCirc(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutCirc:
                                            val = easeInOutCirc(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInBounce:
                                            val = easeInBounce(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutBounce:
                                            val = easeOutBounce(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutBounce:
                                            val = easeInOutBounce(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInBack:
                                            val = easeInBack(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutBack:
                                            val = easeOutBack(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutBack:
                                            val = easeInOutElastic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInElastic:
                                            val = easeInElastic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeOutElastic:
                                            val = easeOutElastic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.easeInOutElastic:
                                            val = easeInOutElastic(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        case LeanTweenType.punch:
                                        case LeanTweenType.easeShake:
                                            if (tween.tweenType == LeanTweenType.punch)
                                            {
                                                tween.animationCurve = LeanTween.punch;
                                            }
                                            else if (tween.tweenType == LeanTweenType.easeShake)
                                            {
                                                tween.animationCurve = LeanTween.shake;
                                            }
                                            tween.to.x = tween.from.x + tween.to.x;
                                            tween.diff.x = tween.to.x - tween.from.x;
                                            val = tweenOnCurve(tween, ratioPassed);
                                            break;
                                        case LeanTweenType.easeSpring:
                                            val = spring(tween.from.x, tween.to.x, ratioPassed);
                                            break;
                                        default:
                                            {
                                                val = tween.from.x + tween.diff.x * ratioPassed;
                                                break;
                                            }
                                    }

                                }

                                //Debug.Log("from:"+from+" to:"+to+" val:"+val+" ratioPassed:"+ratioPassed);
                                if (tweenAction == TweenAction.MOVE_X)
                                {
                                    trans.position = new Vector3(val, trans.position.y, trans.position.z);
                                }
                                else if (tweenAction == TweenAction.MOVE_Y)
                                {
                                    trans.position = new Vector3(trans.position.x, val, trans.position.z);
                                }
                                else if (tweenAction == TweenAction.MOVE_Z)
                                {
                                    trans.position = new Vector3(trans.position.x, trans.position.y, val);
                                }
                                if (tweenAction == TweenAction.MOVE_LOCAL_X)
                                {
                                    trans.localPosition = new Vector3(val, trans.localPosition.y, trans.localPosition.z);
                                }
                                else if (tweenAction == TweenAction.MOVE_LOCAL_Y)
                                {
                                    trans.localPosition = new Vector3(trans.localPosition.x, val, trans.localPosition.z);
                                }
                                else if (tweenAction == TweenAction.MOVE_LOCAL_Z)
                                {
                                    trans.localPosition = new Vector3(trans.localPosition.x, trans.localPosition.y, val);
                                }
                                else if (tweenAction == TweenAction.MOVE_CURVED)
                                {
                                    if (tween.path.orientToPath)
                                    {
                                        if (tween.path.orientToPath2d)
                                        {
                                            tween.path.place2d(trans, val);
                                        }
                                        else
                                        {
                                            tween.path.place(trans, val);
                                        }
                                    }
                                    else
                                    {
                                        trans.position = tween.path.point(val);
                                    }
                                    // Debug.Log("val:"+val+" trans.position:"+trans.position + " 0:"+ tween.curves[0] +" 1:"+tween.curves[1] +" 2:"+tween.curves[2] +" 3:"+tween.curves[3]);
                                }
                                else if ((TweenAction)tweenAction == TweenAction.MOVE_CURVED_LOCAL)
                                {
                                    if (tween.path.orientToPath)
                                    {
                                        if (tween.path.orientToPath2d)
                                        {
                                            tween.path.placeLocal2d(trans, val);
                                        }
                                        else
                                        {
                                            tween.path.placeLocal(trans, val);
                                        }
                                    }
                                    else
                                    {
                                        trans.localPosition = tween.path.point(val);
                                    }
                                    // Debug.Log("val:"+val+" trans.position:"+trans.position);
                                }
                                else if (tweenAction == TweenAction.MOVE_SPLINE)
                                {
                                    if (tween.spline.orientToPath)
                                    {
                                        if (tween.spline.orientToPath2d)
                                        {
                                            tween.spline.place2d(trans, val);
                                        }
                                        else
                                        {
                                            tween.spline.place(trans, val);
                                        }
                                    }
                                    else
                                    {
                                        trans.position = tween.spline.point(val);
                                    }
                                }
                                else if (tweenAction == TweenAction.MOVE_SPLINE_LOCAL)
                                {
                                    if (tween.spline.orientToPath)
                                    {
                                        if (tween.spline.orientToPath2d)
                                        {
                                            tween.spline.placeLocal2d(trans, val);
                                        }
                                        else
                                        {
                                            tween.spline.placeLocal(trans, val);
                                        }
                                    }
                                    else
                                    {
                                        trans.localPosition = tween.spline.point(val);
                                    }
                                }
                                else if (tweenAction == TweenAction.SCALE_X)
                                {
                                    trans.localScale = new Vector3(val, trans.localScale.y, trans.localScale.z);
                                }
                                else if (tweenAction == TweenAction.SCALE_Y)
                                {
                                    trans.localScale = new Vector3(trans.localScale.x, val, trans.localScale.z);
                                }
                                else if (tweenAction == TweenAction.SCALE_Z)
                                {
                                    trans.localScale = new Vector3(trans.localScale.x, trans.localScale.y, val);
                                }
                                else if (tweenAction == TweenAction.ROTATE_X)
                                {
                                    trans.eulerAngles = new Vector3(val, trans.eulerAngles.y, trans.eulerAngles.z);
                                }
                                else if (tweenAction == TweenAction.ROTATE_Y)
                                {
                                    trans.eulerAngles = new Vector3(trans.eulerAngles.x, val, trans.eulerAngles.z);
                                }
                                else if (tweenAction == TweenAction.ROTATE_Z)
                                {
                                    trans.eulerAngles = new Vector3(trans.eulerAngles.x, trans.eulerAngles.y, val);
                                }
                                else if (tweenAction == TweenAction.ROTATE_AROUND)
                                {
                                    Vector3 origPos = trans.localPosition;
                                    Vector3 rotateAroundPt = (Vector3)trans.TransformPoint(tween.point);
                                    trans.RotateAround(rotateAroundPt, tween.axis, -val);
                                    Vector3 diff = origPos - trans.localPosition;

                                    trans.localPosition = origPos - diff;
                                    // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position
                                    trans.rotation = tween.origRotation;

                                    rotateAroundPt = (Vector3)trans.TransformPoint(tween.point);
                                    trans.RotateAround(rotateAroundPt, tween.axis, val);

                                    //GameObject cubeMarker = GameObject.Find("TweenRotatePoint");
                                    //cubeMarker.transform.position = rotateAroundPt;

                                }
                                else if (tweenAction == TweenAction.ROTATE_AROUND_LOCAL)
                                {
                                    Vector3 origPos = trans.localPosition;
                                    trans.RotateAround((Vector3)trans.TransformPoint(tween.point),
                                        trans.TransformDirection(tween.axis), -val);
                                    Vector3 diff = origPos - trans.localPosition;

                                    trans.localPosition = origPos - diff;
                                    // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position
                                    trans.localRotation = tween.origRotation;
                                    Vector3 rotateAroundPt = (Vector3)trans.TransformPoint(tween.point);
                                    trans.RotateAround(rotateAroundPt, trans.TransformDirection(tween.axis), val);

                                    //GameObject cubeMarker = GameObject.Find("TweenRotatePoint");
                                    //cubeMarker.transform.position = rotateAroundPt;

                                }
                                else if (tweenAction == TweenAction.ALPHA)
                                {
#if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2

					    	if(trans.gameObject.renderer){
								foreach(Material mat in trans.gameObject.renderer.materials){
	        						mat.color = new Color( mat.color.r, mat.color.g, mat.color.b, val);
	    						}
							}
							if(trans.childCount>0){
								foreach (Transform child in trans) {
									if(child.gameObject.renderer!=null){
										foreach(Material mat in child.gameObject.renderer.materials){
			        						mat.color = new Color( mat.color.r, mat.color.g, mat.color.b, val);
			    						}
			    					}
								}
							}

#else

                                    SpriteRenderer ren = trans.gameObject.GetComponent<SpriteRenderer>();

                                    if (ren != null)
                                    {
                                        ren.color = new Color(ren.color.r, ren.color.g, ren.color.b, val);
                                    }
                                    else
                                    {
                                        if (trans.gameObject.GetComponent<Renderer>() != null)
                                        {
                                            foreach (Material mat in trans.gameObject.GetComponent<Renderer>().materials
                                                )
                                            {
                                                if (mat.HasProperty("_Color"))
                                                {
                                                    mat.color = new Color(mat.color.r, mat.color.g, mat.color.b, val);
                                                }
                                                else if (mat.HasProperty("_TintColor"))
                                                {
                                                    Color col = mat.GetColor("_TintColor");
                                                    mat.SetColor("_TintColor", new Color(col.r, col.g, col.b, val));
                                                }
                                            }
                                        }
                                        if (trans.childCount > 0)
                                        {
                                            foreach (Transform child in trans)
                                            {
                                                if (child.gameObject.GetComponent<Renderer>() != null)
                                                {
                                                    foreach (
                                                        Material mat in
                                                            child.gameObject.GetComponent<Renderer>().materials)
                                                    {
                                                        mat.color = new Color(mat.color.r, mat.color.g, mat.color.b, val);
                                                    }
                                                }
                                            }
                                        }
                                    }

#endif
                                }
                                else if (tweenAction == TweenAction.ALPHA_VERTEX)
                                {
                                    Mesh mesh = trans.GetComponent<MeshFilter>().mesh;
                                    Vector3[] vertices = mesh.vertices;
                                    Color32[] colors = new Color32[vertices.Length];
                                    Color32 c = mesh.colors32[0];
                                    c = new Color(c.r, c.g, c.b, val);
                                    for (int k = 0; k < vertices.Length; k++)
                                    {
                                        colors[k] = c;
                                    }
                                    mesh.colors32 = colors;
                                }
                                else if (tweenAction == TweenAction.COLOR || tweenAction == TweenAction.CALLBACK_COLOR)
                                {
                                    Color toColor = tweenColor(tween, val);
                                    // Debug.Log("val:"+val+" tween:"+tween+" tween.diff:"+tween.diff);
                                    if (tweenAction == TweenAction.COLOR)
                                    {
                                        if (trans.gameObject.GetComponent<Renderer>() != null)
                                        {
                                            foreach (Material mat in trans.gameObject.GetComponent<Renderer>().materials
                                                )
                                            {
                                                mat.color = toColor;
                                            }
                                        }
                                        if (trans.childCount > 0)
                                        {
                                            foreach (Transform child in trans)
                                            {
                                                if (child.gameObject.GetComponent<Renderer>() != null)
                                                {
                                                    foreach (
                                                        Material mat in
                                                            child.gameObject.GetComponent<Renderer>().materials)
                                                    {
                                                        mat.color = toColor;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    if (tween.onUpdateColor != null)
                                    {
                                        tween.onUpdateColor(toColor);
                                    }
                                }
#if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5
                                else if (tweenAction == TweenAction.CANVAS_ALPHA)
                                {
                                    Color c = tween.uiImage.color;
                                    c.a = val;
                                    tween.uiImage.color = c;
                                }
                                else if (tweenAction == TweenAction.CANVAS_COLOR)
                                {
                                    Color toColor = tweenColor(tween, val);
                                    tween.uiImage.color = toColor;
                                    if (tween.onUpdateColor != null)
                                    {
                                        tween.onUpdateColor(toColor);
                                    }
                                }
                                else if (tweenAction == TweenAction.TEXT_ALPHA)
                                {
                                    textAlphaRecursive(trans, val);
                                }
                                else if (tweenAction == TweenAction.TEXT_COLOR)
                                {
                                    Color toColor = tweenColor(tween, val);
                                    tween.uiText.color = toColor;
                                    if (tween.onUpdateColor != null)
                                    {
                                        tween.onUpdateColor(toColor);
                                    }
                                    if (trans.childCount > 0)
                                    {
                                        foreach (Transform child in trans)
                                        {
                                            UnityEngine.UI.Text uiText =
                                                child.gameObject.GetComponent<UnityEngine.UI.Text>();
                                            if (uiText != null)
                                            {
                                                uiText.color = toColor;
                                            }
                                        }
                                    }
                                }
                                else if (tweenAction == TweenAction.CANVAS_ROTATEAROUND)
                                {
                                    // figure out how much the rotation has shifted the object over
                                    RectTransform rect = tween.rectTransform;
                                    Vector3 origPos = rect.localPosition;
                                    rect.RotateAround((Vector3)rect.TransformPoint(tween.point), tween.axis, -val);
                                    Vector3 diff = origPos - rect.localPosition;

                                    rect.localPosition = origPos - diff;
                                    // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position
                                    rect.rotation = tween.origRotation;
                                    rect.RotateAround((Vector3)rect.TransformPoint(tween.point), tween.axis, val);
                                }
                                else if (tweenAction == TweenAction.CANVAS_ROTATEAROUND_LOCAL)
                                {
                                    // figure out how much the rotation has shifted the object over
                                    RectTransform rect = tween.rectTransform;
                                    Vector3 origPos = rect.localPosition;
                                    rect.RotateAround((Vector3)rect.TransformPoint(tween.point),
                                        rect.TransformDirection(tween.axis), -val);
                                    Vector3 diff = origPos - rect.localPosition;

                                    rect.localPosition = origPos - diff;
                                    // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position
                                    rect.rotation = tween.origRotation;
                                    rect.RotateAround((Vector3)rect.TransformPoint(tween.point),
                                        rect.TransformDirection(tween.axis), val);
                                }
                                else if (tweenAction == TweenAction.CANVAS_PLAYSPRITE)
                                {
                                    int frame = (int)Mathf.Round(val);
                                    // Debug.Log("frame:"+frame+" val:"+val);
                                    tween.uiImage.sprite = tween.sprites[frame];
                                }
#endif

                            }
                            else if (tweenAction >= TweenAction.MOVE)
                            {
                                //

                                if (tween.animationCurve != null)
                                {
                                    newVect = tweenOnCurveVector(tween, ratioPassed);
                                }
                                else
                                {
                                    if (tween.tweenType == LeanTweenType.linear)
                                    {
                                        newVect = new Vector3(tween.from.x + tween.diff.x * ratioPassed,
                                            tween.from.y + tween.diff.y * ratioPassed,
                                            tween.from.z + tween.diff.z * ratioPassed);
                                    }
                                    else if (tween.tweenType >= LeanTweenType.linear)
                                    {
                                        switch (tween.tweenType)
                                        {
                                            case LeanTweenType.easeOutQuad:
                                                newVect =
                                                    new Vector3(
                                                        easeOutQuadOpt(tween.from.x, tween.diff.x, ratioPassed),
                                                        easeOutQuadOpt(tween.from.y, tween.diff.y, ratioPassed),
                                                        easeOutQuadOpt(tween.from.z, tween.diff.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInQuad:
                                                newVect =
                                                    new Vector3(easeInQuadOpt(tween.from.x, tween.diff.x, ratioPassed),
                                                        easeInQuadOpt(tween.from.y, tween.diff.y, ratioPassed),
                                                        easeInQuadOpt(tween.from.z, tween.diff.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutQuad:
                                                newVect =
                                                    new Vector3(
                                                        easeInOutQuadOpt(tween.from.x, tween.diff.x, ratioPassed),
                                                        easeInOutQuadOpt(tween.from.y, tween.diff.y, ratioPassed),
                                                        easeInOutQuadOpt(tween.from.z, tween.diff.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInCubic:
                                                newVect = new Vector3(
                                                    easeInCubic(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInCubic(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInCubic(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutCubic:
                                                newVect =
                                                    new Vector3(easeOutCubic(tween.from.x, tween.to.x, ratioPassed),
                                                        easeOutCubic(tween.from.y, tween.to.y, ratioPassed),
                                                        easeOutCubic(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutCubic:
                                                newVect =
                                                    new Vector3(easeInOutCubic(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutCubic(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutCubic(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInQuart:
                                                newVect = new Vector3(
                                                    easeInQuart(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInQuart(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInQuart(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutQuart:
                                                newVect =
                                                    new Vector3(easeOutQuart(tween.from.x, tween.to.x, ratioPassed),
                                                        easeOutQuart(tween.from.y, tween.to.y, ratioPassed),
                                                        easeOutQuart(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutQuart:
                                                newVect =
                                                    new Vector3(easeInOutQuart(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutQuart(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutQuart(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInQuint:
                                                newVect = new Vector3(
                                                    easeInQuint(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInQuint(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInQuint(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutQuint:
                                                newVect =
                                                    new Vector3(easeOutQuint(tween.from.x, tween.to.x, ratioPassed),
                                                        easeOutQuint(tween.from.y, tween.to.y, ratioPassed),
                                                        easeOutQuint(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutQuint:
                                                newVect =
                                                    new Vector3(easeInOutQuint(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutQuint(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutQuint(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInSine:
                                                newVect = new Vector3(
                                                    easeInSine(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInSine(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInSine(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutSine:
                                                newVect = new Vector3(
                                                    easeOutSine(tween.from.x, tween.to.x, ratioPassed),
                                                    easeOutSine(tween.from.y, tween.to.y, ratioPassed),
                                                    easeOutSine(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutSine:
                                                newVect =
                                                    new Vector3(easeInOutSine(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutSine(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutSine(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInExpo:
                                                newVect = new Vector3(
                                                    easeInExpo(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInExpo(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInExpo(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutExpo:
                                                newVect = new Vector3(
                                                    easeOutExpo(tween.from.x, tween.to.x, ratioPassed),
                                                    easeOutExpo(tween.from.y, tween.to.y, ratioPassed),
                                                    easeOutExpo(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutExpo:
                                                newVect =
                                                    new Vector3(easeInOutExpo(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutExpo(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutExpo(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInCirc:
                                                newVect = new Vector3(
                                                    easeInCirc(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInCirc(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInCirc(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutCirc:
                                                newVect = new Vector3(
                                                    easeOutCirc(tween.from.x, tween.to.x, ratioPassed),
                                                    easeOutCirc(tween.from.y, tween.to.y, ratioPassed),
                                                    easeOutCirc(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutCirc:
                                                newVect =
                                                    new Vector3(easeInOutCirc(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutCirc(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutCirc(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInBounce:
                                                newVect =
                                                    new Vector3(easeInBounce(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInBounce(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInBounce(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutBounce:
                                                newVect =
                                                    new Vector3(easeOutBounce(tween.from.x, tween.to.x, ratioPassed),
                                                        easeOutBounce(tween.from.y, tween.to.y, ratioPassed),
                                                        easeOutBounce(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutBounce:
                                                newVect =
                                                    new Vector3(easeInOutBounce(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutBounce(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutBounce(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInBack:
                                                newVect = new Vector3(
                                                    easeInBack(tween.from.x, tween.to.x, ratioPassed),
                                                    easeInBack(tween.from.y, tween.to.y, ratioPassed),
                                                    easeInBack(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutBack:
                                                newVect = new Vector3(
                                                    easeOutBack(tween.from.x, tween.to.x, ratioPassed),
                                                    easeOutBack(tween.from.y, tween.to.y, ratioPassed),
                                                    easeOutBack(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutBack:
                                                newVect =
                                                    new Vector3(easeInOutBack(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutBack(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutBack(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInElastic:
                                                newVect =
                                                    new Vector3(easeInElastic(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInElastic(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInElastic(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeOutElastic:
                                                newVect =
                                                    new Vector3(easeOutElastic(tween.from.x, tween.to.x, ratioPassed),
                                                        easeOutElastic(tween.from.y, tween.to.y, ratioPassed),
                                                        easeOutElastic(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.easeInOutElastic:
                                                newVect =
                                                    new Vector3(
                                                        easeInOutElastic(tween.from.x, tween.to.x, ratioPassed),
                                                        easeInOutElastic(tween.from.y, tween.to.y, ratioPassed),
                                                        easeInOutElastic(tween.from.z, tween.to.z, ratioPassed));
                                                break;
                                            case LeanTweenType.punch:
                                            case LeanTweenType.easeShake:
                                                if (tween.tweenType == LeanTweenType.punch)
                                                {
                                                    tween.animationCurve = LeanTween.punch;
                                                }
                                                else if (tween.tweenType == LeanTweenType.easeShake)
                                                {
                                                    tween.animationCurve = LeanTween.shake;
                                                }
                                                tween.to = tween.from + tween.to;
                                                tween.diff = tween.to - tween.from;
                                                if (tweenAction == TweenAction.ROTATE ||
                                                    tweenAction == TweenAction.ROTATE_LOCAL)
                                                {
                                                    tween.to = new Vector3(closestRot(tween.from.x, tween.to.x),
                                                        closestRot(tween.from.y, tween.to.y),
                                                        closestRot(tween.from.z, tween.to.z));
                                                }
                                                newVect = tweenOnCurveVector(tween, ratioPassed);
                                                break;
                                            case LeanTweenType.easeSpring:
                                                newVect = new Vector3(spring(tween.from.x, tween.to.x, ratioPassed),
                                                    spring(tween.from.y, tween.to.y, ratioPassed),
                                                    spring(tween.from.z, tween.to.z, ratioPassed));
                                                break;

                                        }
                                    }
                                    else
                                    {
                                        newVect = new Vector3(tween.from.x + tween.diff.x * ratioPassed,
                                            tween.from.y + tween.diff.y * ratioPassed,
                                            tween.from.z + tween.diff.z * ratioPassed);
                                    }
                                }

                                if (tweenAction == TweenAction.MOVE)
                                {
                                    trans.position = newVect;
                                }
                                else if (tweenAction == TweenAction.MOVE_LOCAL)
                                {
                                    trans.localPosition = newVect;
                                }
                                else if (tweenAction == TweenAction.ROTATE)
                                {
                                    /*if(tween.hasPhysics){
                                    trans.gameObject.rigidbody.MoveRotation(Quaternion.Euler( newVect ));
                                }else{*/
                                    trans.eulerAngles = newVect;
                                    // }
                                }
                                else if (tweenAction == TweenAction.ROTATE_LOCAL)
                                {
                                    trans.localEulerAngles = newVect;
                                }
                                else if (tweenAction == TweenAction.SCALE)
                                {
                                    trans.localScale = newVect;
                                }
                                else if (tweenAction == TweenAction.GUI_MOVE)
                                {
                                    tween.ltRect.rect = new Rect(newVect.x, newVect.y, tween.ltRect.rect.width,
                                        tween.ltRect.rect.height);
                                }
                                else if (tweenAction == TweenAction.GUI_MOVE_MARGIN)
                                {
                                    tween.ltRect.margin = new Vector2(newVect.x, newVect.y);
                                }
                                else if (tweenAction == TweenAction.GUI_SCALE)
                                {
                                    tween.ltRect.rect = new Rect(tween.ltRect.rect.x, tween.ltRect.rect.y, newVect.x,
                                        newVect.y);
                                }
                                else if (tweenAction == TweenAction.GUI_ALPHA)
                                {
                                    tween.ltRect.alpha = newVect.x;
                                }
                                else if (tweenAction == TweenAction.GUI_ROTATE)
                                {
                                    tween.ltRect.rotation = newVect.x;
                                }
#if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5
                                else if (tweenAction == TweenAction.CANVAS_MOVE)
                                {
                                    tween.rectTransform.anchoredPosition3D = newVect;
                                }
                                else if (tweenAction == TweenAction.CANVAS_SCALE)
                                {
                                    tween.rectTransform.localScale = newVect;
                                }
#endif
                            }
                            // Debug.Log("tween.delay:"+tween.delay + " tween.passed:"+tween.passed + " tweenAction:"+tweenAction + " to:"+newVect+" axis:"+tween.axis);

                            if (tween.hasUpdateCallback)
                            {
                                if (tween.onUpdateFloat != null)
                                {
                                    tween.onUpdateFloat(val);
                                }
                                if (tween.onUpdateFloatRatio != null)
                                {
                                    tween.onUpdateFloatRatio(val, ratioPassed);
                                }
                                else if (tween.onUpdateFloatObject != null)
                                {
                                    tween.onUpdateFloatObject(val, tween.onUpdateParam);
                                }
                                else if (tween.onUpdateVector3Object != null)
                                {
                                    tween.onUpdateVector3Object(newVect, tween.onUpdateParam);
                                }
                                else if (tween.onUpdateVector3 != null)
                                {
                                    tween.onUpdateVector3(newVect);
                                }
                                else if (tween.onUpdateVector2 != null)
                                {
                                    tween.onUpdateVector2(new Vector2(newVect.x, newVect.y));
                                }
                            }
#if LEANTWEEN_1
					else if(tween.optional!=null){ // LeanTween 1.x legacy stuff
						var onUpdate = tween.optional["onUpdate"];
						if(onUpdate!=null){
							Hashtable updateParam = (Hashtable)tween.optional["onUpdateParam"];
							if((TweenAction)tweenAction==TweenAction.VALUE3){
								if(onUpdate.GetType() == typeof(string)){
									string onUpdateS = onUpdate as string;
									customTarget = tween.optional["onUpdateTarget"]!=null ? tween.optional["onUpdateTarget"] as GameObject : trans.gameObject;
									customTarget.BroadcastMessage( onUpdateS, newVect );
								}else if(onUpdate.GetType() == typeof(System.Action<Vector3, Hashtable>)){
									System.Action<Vector3, Hashtable> onUpdateA = (System.Action<Vector3, Hashtable>)onUpdate;
									onUpdateA(newVect, updateParam);
								}else{
									System.Action<Vector3> onUpdateA = (System.Action<Vector3>)onUpdate;
									onUpdateA(newVect);
								}
							}else{
								if(onUpdate.GetType() == typeof(string)){
									string onUpdateS = onUpdate as string;
									if (tween.optional["onUpdateTarget"]!=null){
										customTarget = tween.optional["onUpdateTarget"] as GameObject;
										customTarget.BroadcastMessage( onUpdateS, val );
									}else{
										trans.gameObject.BroadcastMessage( onUpdateS, val );
									}
								}else if(onUpdate.GetType() == typeof(System.Action<float, Hashtable>)){
									System.Action<float, Hashtable> onUpdateA = (System.Action<float, Hashtable>)onUpdate;
									onUpdateA(val, updateParam);
								}else if(onUpdate.GetType() == typeof(System.Action<Vector3>)){
									System.Action<Vector3> onUpdateA = (System.Action<Vector3>)onUpdate;
									onUpdateA( newVect );
								}else{
									System.Action<float> onUpdateA = (System.Action<float>)onUpdate;
									onUpdateA(val);
								}
							}
						}
					}
#endif
                        }

                        if (isTweenFinished)
                        {
                            if (tween.loopType == LeanTweenType.once || tween.loopCount == 1)
                            {
                                tweensFinished[finishedCnt] = i;
                                finishedCnt++;

                                // Debug.Log("finished tween:"+i+" tween:"+tween);
                                if (tweenAction == TweenAction.GUI_ROTATE)
                                    tween.ltRect.rotateFinished = true;

                                if (tweenAction == TweenAction.DELAYED_SOUND)
                                {
                                    AudioSource.PlayClipAtPoint((AudioClip)tween.onCompleteParam, tween.to,
                                        tween.from.x);
                                }
                            }
                            else
                            {
                                if ((tween.loopCount < 0 && tween.type == TweenAction.CALLBACK) ||
                                    tween.onCompleteOnRepeat)
                                {
                                    if (tweenAction == TweenAction.DELAYED_SOUND)
                                    {
                                        AudioSource.PlayClipAtPoint((AudioClip)tween.onCompleteParam, tween.to,
                                            tween.from.x);
                                    }
                                    if (tween.onComplete != null)
                                    {
                                        tween.onComplete();
                                    }
                                    else if (tween.onCompleteObject != null)
                                    {
                                        tween.onCompleteObject(tween.onCompleteParam);
                                    }
                                }
                                if (tween.loopCount >= 1)
                                {
                                    tween.loopCount--;
                                }
                                // Debug.Log("tween.loopType:"+tween.loopType+" tween.loopCount:"+tween.loopCount+" passed:"+tween.passed);
                                if (tween.loopType == LeanTweenType.pingPong)
                                {
                                    tween.direction = 0.0f - (tween.direction);
                                }
                                else
                                {
                                    tween.passed = Mathf.Epsilon;
                                }
                            }
                        }
                        else if (tween.delay <= 0)
                        {
                            tween.passed += dt * tween.direction;
                        }
                        else
                        {
                            tween.delay -= dt;
                            // Debug.Log("dt:"+dt+" tween:"+i+" tween:"+tween);
                            if (tween.delay < 0)
                            {
                                tween.passed = 0.0f; //-tween.delay
                                tween.delay = 0.0f;
                            }
                        }
                    }
                }

                // Debug.Log("maxTweenReached:"+maxTweenReached);
                tweenMaxSearch = maxTweenReached;
                frameRendered = Time.frameCount;

                for (int i = 0; i < finishedCnt; i++)
                {
                    j = tweensFinished[i];
                    tween = tweens[j];

                    if (tween.onComplete != null)
                    {
                        System.Action onComplete = tween.onComplete;
                        removeTween(j);
                        //tween.cleanup();
                        onComplete();

                    }
                    else if (tween.onCompleteObject != null)
                    {
                        System.Action<object> onCompleteObject = tween.onCompleteObject;
                        object onCompleteParam = tween.onCompleteParam;
                        removeTween(j);
                        //tween.cleanup();
                        onCompleteObject(onCompleteParam);
                    }
#if LEANTWEEN_1
			else if(tween.optional!=null){
				System.Action callback=null;
				System.Action<object> callbackWithParam = null;
				string callbackS=string.Empty;
				object callbackParam=null;
				Hashtable optional = tween.optional;
				if(tween.optional!=null && tween.trans){
					if(tween.optional["onComplete"]!=null){
						callbackParam = tween.optional["onCompleteParam"];
						if(tween.optional["onComplete"].GetType()==typeof(string)){
							callbackS = tween.optional["onComplete"] as string;
						}else{
							if(callbackParam!=null){
								callbackWithParam = (System.Action<object>)tween.optional["onComplete"];
							}else{
								callback = (System.Action)tween.optional["onComplete"];	
								if(callback==null)
									Debug.LogWarning("callback was not converted");
							}
						}
					}
				}
				removeTween(j);
				if(callbackWithParam!=null){
					callbackWithParam( callbackParam );
				}else if(callback!=null){
					callback();
				}else if(callbackS!=string.Empty){
					if (optional["onCompleteTarget"]!=null){
						customTarget = optional["onCompleteTarget"] as GameObject;
						if(callbackParam!=null) customTarget.BroadcastMessage ( callbackS, callbackParam );
						else customTarget.BroadcastMessage( callbackS );
					}else{
						if(callbackParam!=null) trans.gameObject.BroadcastMessage ( callbackS, callbackParam );
						else trans.gameObject.BroadcastMessage( callbackS );
					}
				}
				
			}
#endif
                    else
                    {
                        removeTween(j);
                        //tween.cleanup();
                    }
                }

            }
        }
예제 #9
0
        /**
    * This line is optional. Here you can specify the maximum number of tweens you will use (the default is 400).  This must be called before any use of LeanTween is made for it to be effective.
    * 
    * @method LeanTween.init
    * @param {integer} maxSimultaneousTweens:int The maximum number of tweens you will use, make sure you don't go over this limit, otherwise the code will throw an error
    * @example
    *   LeanTween.init( 800 );
    */

        public static void init(int maxSimultaneousTweens)
        {
            if (tweens == null)
            {
                maxTweens = maxSimultaneousTweens;
                tweens = new LTDescr[maxTweens];
                tweensFinished = new int[maxTweens];
                _tweenEmpty = new GameObject();
                _tweenEmpty.name = "~LeanTween";
                _tweenEmpty.AddComponent(typeof(LeanTween));
                _tweenEmpty.isStatic = true;
#if !UNITY_EDITOR
		_tweenEmpty.hideFlags = HideFlags.HideAndDontSave;
#endif
                DontDestroyOnLoad(_tweenEmpty);
                for (int i = 0; i < maxTweens; i++)
                {
                    tweens[i] = new LTDescr();
                }
            }
        }