Exemplo n.º 1
0
        // 可以多次调用,多次调用的话会取消上一次的协程
        public static async ETTask <int> MoveToAsync(this Unit unit, Vector3 targetPos, ETCancellationToken cancellationToken = null)
        {
            if (!unit.GetComponent <MoveComponent>().Enable)
            {
                Log.Error("暂时无法移动");
                return(1);
            }
            C2M_PathfindingResult msg = new C2M_PathfindingResult()
            {
                X = targetPos.x, Y = targetPos.y, Z = targetPos.z
            };

            unit.ZoneScene().GetComponent <SessionComponent>().Session.Send(msg);

            ObjectWait objectWait = unit.GetComponent <ObjectWait>();

            // 要取消上一次的移动协程
            objectWait.Notify(new WaitType.Wait_UnitStop()
            {
                Error = WaitTypeError.Cancel
            });

            // 一直等到unit发送stop
            WaitType.Wait_UnitStop waitUnitStop = await objectWait.Wait <WaitType.Wait_UnitStop>(cancellationToken);

            return(waitUnitStop.Error);
        }
Exemplo n.º 2
0
        // 可以多次调用,多次调用的话会取消上一次的协程
        public static async ETTask <int> MoveToAsync(this Unit unit, Vector3 targetPos, ETCancellationToken cancellationToken = null)
        {
            C2M_PathfindingResult msg = new C2M_PathfindingResult();

            unit.Domain.GetComponent <SessionComponent>().Session.Send(msg);

            ObjectWait objectWait = unit.GetComponent <ObjectWait>();

            // 要取消上一次的移动协程
            objectWait.Notify(new WaitType.Wait_UnitStop()
            {
                Error = WaitTypeError.Cancel
            });

            // 一直等到unit发送stop
            WaitType.Wait_UnitStop waitUnitStop = await objectWait.Wait <WaitType.Wait_UnitStop>();

            return(waitUnitStop.Error);
        }