コード例 #1
0
ファイル: BookIconFrame.cs プロジェクト: tuita520/u3dmmorpg
        public void Fly(Transform toObj, FlyIconInfo info, Action <Vector3> call = null)
        {
            objTransform = transform;
            objTransform.localPosition = info.From;
            objTransform.localScale    = Vector3.one;
            widget.alpha = info.FromAlpha;

            var scaleTo = Vector3.one;

            if (info.ToWidth > 0 && widget.width > 0)
            {
                scaleTo.x = (float)info.ToWidth / widget.width;
            }

            if (info.ToHeight > 0 && widget.height > 0)
            {
                scaleTo.y = (float)info.ToHeight / widget.height;
            }

            if (info.Depth > 0)
            {
                widget.depth = info.Depth;
            }

            var            root       = widget.root;
            Func <Vector3> targetFunc = () =>
            {
                return(root.transform.InverseTransformPoint(toObj.position));
            };

            Logger.Debug("Start Fly ...!");
            root.StartCoroutine(FlyObject(targetFunc(), scaleTo, info, targetFunc, call));
        }
コード例 #2
0
ファイル: BookIconFrame.cs プロジェクト: tuita520/u3dmmorpg
        private IEnumerator FlyObject(Vector3 to, Vector3 toScale, FlyIconInfo info, Func <Vector3> toFunc = null, Action <Vector3> call = null)
        {
            //delay
            yield return(new WaitForSeconds(info.Delay));

            //move
            float elapse = 0;
            var   toPos  = (toFunc != null) ? toFunc() : to;

            Logger.Debug("fly to Pos =>" + toPos.x + "," + toPos.y + "," + toPos.z);
            if (info.UseBezier)
            {
                StarBezierMove(info.From, toPos, info.Time);
            }
            var startRot = objTransform.localRotation;

            while (elapse < info.Time)
            {
                elapse += Time.deltaTime;
                var t = elapse / info.Time;
                if (!info.UseBezier)
                {
                    objTransform.localPosition = Vector3.Lerp(info.From, toPos, t);
                }
                objTransform.localScale = Vector3.Lerp(Vector3.one, toScale, t);
                if (info.UseRotate)
                {
                    var rot = Quaternion.Lerp(startRot, Quaternion.Euler(RotateTo), t);
                    objTransform.localRotation = rot;
                }
                widget.alpha = Mathf.Lerp(1.0f, info.ToAlpha, t);
                yield return(null);
            }

            //stay
            yield return(new WaitForSeconds(info.Stay));

            //call
            if (null != call)
            {
                call(toPos);
            }
        }