Пример #1
0
        /// <summary>
        /// 椭圆运动
        /// VecA与VecB垂直
        /// a和b相等,2D就是一个圆,3D就是一个球
        /// </summary>
        /// <param name="centerPos">中心点</param>
        /// <param name="vecA">向量A,如果是2D,可以当做x或者y轴,与向量B垂直</param>
        /// <param name="VecB">向量B,如果是2D,可以当做x或者y轴,与向量A垂直</param>
        /// <param name="a">向量A长度</param>
        /// <param name="b">向量B长度</param>
        /// <param name="t"></param>
        /// <returns>ActionInterval</returns>
        public static ActionInterval CCEllipse(this Transform obj, float duration, Vector3 centerPos, Vector3 vecA, Vector3 vecB, float a, float b, float startp = 0, float endp = 1, bool relativeWorld = false)
        {
#if UNITY_EDITOR
            if (vecA == Vector3.zero)
            {
                CCLog.LogError("vecA is zero");
            }
            if (vecB == Vector3.zero)
            {
                CCLog.LogError("vecB is zero");
            }

            if ((vecA.x * vecB.x + vecA.y * vecB.y + vecA.z * vecB.z) != 0)
            {
                CCLog.LogError("vecA X vecA != 0");
            }
#endif
            vecA.Normalize();
            vecB.Normalize();

            Vector3 p1     = relativeWorld ? obj.position : obj.localPosition;
            var     action = CCActionFloat.Create(duration, startp, endp);
            action.SetUpdate((t, result) => {
                var pos = CCActionMath.Ellipse(centerPos, vecA, vecB, a, b, result);
                if (relativeWorld)
                {
                    obj.position = pos;
                }
                else
                {
                    obj.localPosition = pos;
                }
            });
            return(action);
        }
Пример #2
0
        /// <summary>
        /// 样条曲线
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="duration">时间</param>
        /// <param name="c1">第一个控制点</param>
        /// <param name="c2">第二个控制点</param>
        /// <param name="p2">目标</param>
        /// <param name="relativeWorld">是否是世界坐标</param>
        /// <returns></returns>
        public static ActionInterval CCCatmullRoomTo(this Transform obj, float duration, Vector3 c1, Vector3 c2, Vector3 p2, bool relativeWorld = false)
        {
            Vector3 p1     = relativeWorld ? obj.position : obj.localPosition;
            var     action = CCActionFloat.Create(duration, 0, 1);

            action.SetUpdate((t, result) => {
                var pos = CCActionMath.CatmullRoom(p1, c1, c2, p2, result);
                if (relativeWorld)
                {
                    obj.position = pos;
                }
                else
                {
                    obj.localPosition = pos;
                }
            });
            return(action);
        }
Пример #3
0
        /// <summary>
        /// 震动
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="duration">时间</param>
        /// <param name="magnitude">震动系数</param>
        /// <param name="relativeWorld">是否是直接坐标</param>
        /// <returns>ActionInterval</returns>
        public static ActionInterval CCShake(this Transform obj, float duration, Vector3 magnitude, bool relativeWorld = false)
        {
            Vector3 curpos = relativeWorld ? obj.position : obj.localPosition;
            var     action = CCActionFloat.Create(duration, 0, 1);

            action.SetInitFunc(() => {
                return(0);
            });
            action.SetUpdate((t, result) => {
                var pos = CCActionMath.Shake(magnitude, curpos, result);
                if (relativeWorld)
                {
                    obj.position = pos;
                }
                else
                {
                    obj.localPosition = pos;
                }
            });
            return(action);
        }