Пример #1
0
        public static BehaviourTimeCallback PathTo(this Transform trans, float duration, List <Vector3> waypoints, NavPathType pathType = NavPathType.LinePosLineDir, int subdivisions = 5)
        {
            FixedPathController pathCtrl = new FixedPathController();
            AbstractNavPath     navPath  = NavPathUtils.Create(pathType, Vector3.zero, false, null, waypoints, subdivisions);

            pathCtrl.StartMove(navPath, navPath.PathLength / duration, Vector3.zero, false);
            pathCtrl.mCtlPosition = trans;
            pathCtrl.mCtlRotate   = trans;

            Callback <FixedPathController, BehaviourTimeCallback> callback = new Callback <FixedPathController, BehaviourTimeCallback>();

            callback.Arg1    = pathCtrl;
            callback.Handler = (Action <FixedPathController, BehaviourTimeCallback>)PathTo;
            BehaviourTimeCallback beh = new BehaviourTimeCallback(callback);

            callback.Arg2 = beh;
            return(beh);
        }
Пример #2
0
        public static BehaviourCallback NavPathTo(this Transform trans, float duration, List <Vector3> waypoints, Vector3 offset, IPathTrigger triggerHandler = null, NavPathFlipType flipType = NavPathFlipType.None, NavPathMoveType pathType = NavPathMoveType.LinePosLineDir, int subdivisions = 5, float pathLength = 0.0f)
        {
            NavPathController pathCtrl = new NavPathController();
            AbstractNavPath   navPath  = NavPathUtils.Create(pathType, offset, flipType, triggerHandler, waypoints, subdivisions, pathLength);

            pathCtrl.StartMove(navPath, navPath.PathLength / duration);
            pathCtrl.mCtlPosition = trans;
            pathCtrl.mCtlRotate   = trans;

            Callback2 <NavPathController, BehaviourCallback> callback = new Callback2 <NavPathController, BehaviourCallback>();

            callback.Arg1    = pathCtrl;
            callback.Handler = (Action <NavPathController, BehaviourCallback>)PathTo;
            BehaviourCallback beh = new BehaviourCallback(callback, callback, callback);

            callback.Arg2 = beh;
            return(beh);
        }
Пример #3
0
        public void StartMove()
        {
            // 初始化数据
            string         pointsStr = "-40.8,0.0;0.0,-13.0;20.26,-0.24;0.0,13.0;-20.56,-0.49;30.46,14.27;-24.65,-14.44;-25.59,16.77;40.00,-15.00";
            List <Vector3> wayPoints = new List <Vector3>();

            NavPathUtils.ParseVector3Array(pointsStr, ref wayPoints);
            AbstractNavPath navPath = NavPathUtils.Create(PathType, Offset, FlipOn, this, wayPoints, Subdivisions);

            PathCtl.StartMove(navPath, 20, Vector3.zero, false);
            PathCtl.EnableMove(true);

            Callback <int> testCallback = ObjectPools.Instance.Acquire <Callback <int> >();

            testCallback.Handler = (Action <int>)TriggerCallback;
            testCallback.Arg1    = 20;
            PathCtl.RegisterTrigger(4.0f, testCallback);
        }
Пример #4
0
        /// <summary>
        /// 触发器长度对应的坐标点
        /// </summary>
        /// <param name="length">触发器长度</param>
        /// <returns>坐标点</returns>
        private Vector3 TriggerPos(float length)
        {
            int i   = 0;
            int cnt = mPathData.RangeLengths.Count;

            while (i < cnt)
            {
                if (mPathData.RangeLengths[i] <= length)
                {
                    i++;
                }
                else
                {
                    break;
                }
            }
            Vector3 result = Vector3.zero;

            if (i < 1)
            {
                result = mPathData.WayPoints[0];
            }
            else if (i >= cnt)
            {
                result = mPathData.WayPoints[cnt - 1];
            }
            else
            {
                float   len1 = length - mPathData.RangeLengths[i - 1];
                float   len2 = mPathData.RangeLengths[i] - mPathData.RangeLengths[i - 1];
                Vector3 all  = mPathData.WayPoints[i] - mPathData.WayPoints[i - 1];
                result = len1 / len2 * all + mPathData.WayPoints[i - 1];
            }
            result = result + mOffset;
            NavPathUtils.Flip(bFlipType, ref result);
            return(result);
        }