Ejemplo n.º 1
0
 public UniTask StartAsync()
 {
     if (called)
     {
         return(UniTask.CompletedTask);
     }
     if (!awakeCalled)
     {
         PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, new AwakeMonitor(this));
     }
     return(new UniTask(promise ?? (promise = new UniTaskCompletionSource())));
 }
 public _EveryValueChanged(TTarget target, Func <TTarget, TProperty> propertySelector,
                           IEqualityComparer <TProperty> equalityComparer, PlayerLoopTiming monitorTiming,
                           CancellationToken cancellationToken)
 {
     this.target = target;
     this.targetAsUnityObject = target as UnityEngine.Object;
     this.propertySelector    = propertySelector;
     this.equalityComparer    = equalityComparer;
     this.cancellationToken   = cancellationToken;
     this.first = true;
     TaskTracker.TrackActiveTask(this, 2);
     PlayerLoopHelper.AddAction(monitorTiming, this);
 }
Ejemplo n.º 3
0
        protected UniTask <T> GetOrAddPromise <T>(ref AsyncTriggerPromise <T> promise, ref AsyncTriggerPromiseDictionary <T> promises, CancellationToken cancellationToken)
        {
            if (destroyCalled)
            {
                return(UniTask.FromCanceled <T>());
            }

            if (!cancellationToken.CanBeCanceled)
            {
                if (promise == null)
                {
                    promise = new AsyncTriggerPromise <T>();
                    if (!calledAwake)
                    {
                        PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, new AwakeMonitor(this));
                    }
                }

                return(promise.Task);
            }

            if (promises == null)
            {
                promises = new AsyncTriggerPromiseDictionary <T>();
            }

            if (promises.TryGetValue(cancellationToken, out var cancellablePromise))
            {
                return(cancellablePromise.Task);
            }

            cancellablePromise = new AsyncTriggerPromise <T>();
            promises.Add(cancellationToken, cancellablePromise);
            if (!calledAwake)
            {
                PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, new AwakeMonitor(this));
            }

            var registrationToken =
                cancellationToken.RegisterWithoutCaptureExecutionContext(Callback,
                                                                         Tuple.Create((ICancellationTokenKeyDictionary)promises, (ICancelablePromise)cancellablePromise));

            if (registeredCancellations == null)
            {
                registeredCancellations = ArrayPool <CancellationTokenRegistration> .Shared.Rent(4);
            }
            ArrayPoolUtil.EnsureCapacity(ref registeredCancellations, registeredCancellationsCount + 1, ArrayPool <CancellationTokenRegistration> .Shared);
            registeredCancellations[registeredCancellationsCount++] = registrationToken;

            return(cancellablePromise.Task);
        }
        public void GetResult(short token)
        {
            try {
                core.GetResult(token);
            }
            finally {
#if ENABLE_IL2CPP
                // workaround for IL2CPP bug.
                PlayerLoopHelper.AddContinuation(PlayerLoopTiming.LastPostLateUpdate, returnDelegate);
#else
                TryReturn();
#endif
            }
        }
Ejemplo n.º 5
0
        public Task InitAsync()
        {
            IsComponentAlive = true;

            if (!s_UniTaskInited)
            {
                var unitySynchronizationContetextField =
                    typeof(PlayerLoopHelper).GetField("unitySynchronizationContetext",
                                                      BindingFlags.Static | BindingFlags.NonPublic);
                unitySynchronizationContetextField.SetValue(null, SynchronizationContext.Current);

                var mainThreadIdField =
                    typeof(PlayerLoopHelper).GetField("mainThreadId", BindingFlags.Static | BindingFlags.NonPublic);
                mainThreadIdField.SetValue(null, Thread.CurrentThread.ManagedThreadId);

                var playerLoop = PlayerLoop.GetDefaultPlayerLoop();

                PlayerLoopHelper.Initialize(ref playerLoop);
                s_UniTaskInited = true;
            }

            return(OnInitAsync());
        }
Ejemplo n.º 6
0
            public _Timer(TimeSpan dueTime, TimeSpan?period, PlayerLoopTiming updateTiming, bool ignoreTimeScale, CancellationToken cancellationToken)
            {
                this.dueTime = (float)dueTime.TotalSeconds;
                this.period  = (period == null) ? null : (float?)period.Value.TotalSeconds;

                if (this.dueTime <= 0)
                {
                    this.dueTime = 0;
                }
                if (this.period != null)
                {
                    if (this.period <= 0)
                    {
                        this.period = 1;
                    }
                }

                this.dueTimePhase    = true;
                this.updateTiming    = updateTiming;
                this.ignoreTimeScale = ignoreTimeScale;
                TaskTracker.TrackActiveTask(this, 2);
                PlayerLoopHelper.AddAction(updateTiming, this);
            }
Ejemplo n.º 7
0
        public Task WaitForStartAsync(CancellationToken cancellationToken)
        {
            if (!PlayerLoopHelper.IsInjectedUniTaskPlayerLoop())
            {
                var unitySynchronizationContextField =
                    typeof(PlayerLoopHelper).GetField("unitySynchronizationContext",
                                                      BindingFlags.Static | BindingFlags.NonPublic);

                // For older version of UniTask
                unitySynchronizationContextField ??=
                typeof(PlayerLoopHelper).GetField("unitySynchronizationContetext",
                                                  BindingFlags.Static | BindingFlags.NonPublic)
                ?? throw new Exception("Could not find PlayerLoopHelper.unitySynchronizationContext field");

                unitySynchronizationContextField.SetValue(null, SynchronizationContext.Current);

                var mainThreadIdField =
                    typeof(PlayerLoopHelper).GetField("mainThreadId", BindingFlags.Static | BindingFlags.NonPublic)
                    ?? throw new Exception("Could not find PlayerLoopHelper.mainThreadId field");
                mainThreadIdField.SetValue(null, Thread.CurrentThread.ManagedThreadId);

                var playerLoop = PlayerLoop.GetCurrentPlayerLoop();
                PlayerLoopHelper.Initialize(ref playerLoop);
            }

            // Handle UniTask exception
            UniTaskScheduler.UnobservedTaskException += UniTaskExceptionHandler;
            // Do not switch thread
            UniTaskScheduler.DispatchUnityMainThread = false;

            TlsWorkaround.Install();

            Application.quitting   += OnApplicationQuitting;
            Console.CancelKeyPress += OnCancelKeyPress;
            return(Task.CompletedTask);
        }
Ejemplo n.º 8
0
        private void Awake()
        {
            var playerLoop = PlayerLoop.GetCurrentPlayerLoop();

            PlayerLoopHelper.Initialize(ref playerLoop);
        }
Ejemplo n.º 9
0
		public UniTask AwakeAsync() {
			if (called) return UniTask.CompletedTask;

			PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, new AwakeMonitor(this));
			return new UniTask(promise ?? (promise = new UniTaskCompletionSource()));
		}
Ejemplo n.º 10
0
        public Task InitAsync()
        {
            // ReSharper disable PossibleNullReferenceException
            IsComponentAlive = true;

            m_Harmony = new Harmony(OpenModComponentId);
            m_Harmony.PatchAll(GetType().Assembly);

            m_UnturnedCommandHandler.Subscribe();
            BindUnturnedEvents();

            var ioHandlers = (List <ICommandInputOutput>) typeof(CommandWindow)
                             .GetField("ioHandlers", BindingFlags.NonPublic | BindingFlags.Instance)
                             .GetValue(Dedicator.commandWindow);

            CommandLineFlag shouldManageConsole = null;
            var             previousShouldManageConsoleValue = true;

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                /* Fix Unturned destroying console and breaking Serilog formatting and colors */
                var windowsConsole           = typeof(Provider).Assembly.GetType("SDG.Unturned.WindowsConsole");
                var shouldManageConsoleField = windowsConsole?.GetField("shouldManageConsole", BindingFlags.Static | BindingFlags.NonPublic);

                if (shouldManageConsoleField != null)
                {
                    shouldManageConsole = (CommandLineFlag)shouldManageConsoleField.GetValue(null);
                    previousShouldManageConsoleValue = shouldManageConsole.value;
                    shouldManageConsole.value        = false;
                }
            }

            m_IoHandlers = ioHandlers.ToList(); // copy Unturneds IoHandlers
            // unturned built-in io handlers
            var defaultIoHandlers = ioHandlers.Where(c =>
                                                     c.GetType().FullName.Equals("SDG.Unturned.ThreadedWindowsConsoleInputOutput") || // type doesnt exist on Linux
                                                     c.GetType().FullName.Equals("SDG.Unturned.WindowsConsoleInputOutput") || // type doesnt exist on Linux
                                                     c.GetType() == typeof(ThreadedConsoleInputOutput) ||
                                                     c.GetType() == typeof(ConsoleInputOutput)).ToList();

            foreach (var ioHandler in defaultIoHandlers)
            {
                Dedicator.commandWindow.removeIOHandler(ioHandler);
            }

            if (shouldManageConsole != null)
            {
                shouldManageConsole.value = previousShouldManageConsoleValue;
            }

            m_OpenModIoHandler = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                ? ActivatorUtilities.CreateInstance <OpenModWindowsConsoleInputOutput>(m_ServiceProvider)
                : ActivatorUtilities.CreateInstance <OpenModConsoleInputOutput>(m_ServiceProvider);

            Dedicator.commandWindow.addIOHandler(m_OpenModIoHandler);

            m_Logger.LogInformation($"OpenMod for Unturned v{m_HostInformation.HostVersion} is initializing...");

            TlsWorkaround.Install();

            if (!s_UniTaskInited)
            {
                var unitySynchronizationContetextField =
                    typeof(PlayerLoopHelper).GetField("unitySynchronizationContetext",
                                                      BindingFlags.Static | BindingFlags.NonPublic);
                unitySynchronizationContetextField.SetValue(null, SynchronizationContext.Current);

                var mainThreadIdField =
                    typeof(PlayerLoopHelper).GetField("mainThreadId", BindingFlags.Static | BindingFlags.NonPublic);
                mainThreadIdField.SetValue(null, Thread.CurrentThread.ManagedThreadId);

                var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
                PlayerLoopHelper.Initialize(ref playerLoop);
                s_UniTaskInited = true;
            }

            m_Logger.LogInformation("OpenMod for Unturned is ready.");

            BroadcastPlugins();
            return(Task.CompletedTask);
            // ReSharper restore PossibleNullReferenceException
        }
        static void Initialize()
        {
            var playerLoop = ScriptBehaviourUpdateOrder.CurrentPlayerLoop;

            PlayerLoopHelper.Initialize(ref playerLoop);
        }
Ejemplo n.º 12
0
    async UniTaskVoid Start()
    {
        RunStandardTaskAsync();

        UnityEngine.Debug.Log("UniTaskPlayerLoop ready? " + PlayerLoopHelper.IsInjectedUniTaskPlayerLoop());

        //var url =  "http://google.com/404";
        //var webRequestAsyncOperation = UnityWebRequest.Get(url).SendWebRequest();
        //await webRequestAsyncOperation.ToUniTask();

        //PlayerLoopInfo.Inject();

        //_ = AsyncFixedUpdate();
        //StartCoroutine(CoroutineFixedUpdate());

        //StartCoroutine(TestCoroutine().ToCoroutine());

        // Application.logMessageReceived += Application_logMessageReceived;

        // var rp = new AsyncReactiveProperty<int>();


        // rp.AddTo(this.GetCancellationTokenOnDestroy());
        //var cts = new CancellationTokenSource();


        // UniTask.Post(

        // CancellationToken.

        //UniTask.Delay(TimeSpan.FromSeconds(3)).


        //okButton.onClick.AddListener(UniTask.UnityAction(async () =>
        //{
        //    _ = ExecuteAsync();

        //    await UniTask.Yield();

        //    //await DelayCheck();
        //    /*
        //    UnityEngine.Debug.Log("click:" + PlayerLoopInfo.CurrentLoopType);
        //    StartCoroutine(CoroutineRun());
        //    StartCoroutine(CoroutineRun2());
        //    _ = AsyncRun();
        //    _ = AsyncLastUpdate();
        //    _ = AsyncLastLast();
        //    */
        //    //await UniTask.Yield();
        //    //_ = Test2();
        //    // EarlyUpdate.ExecuteMainThreadJobs
        //    // _ = Test2();

        //    //var t = await Resources.LoadAsync<TextAsset>(Application.streamingAssetsPath + "test.txt");
        //    //Debug.Log("LoadEnd" + PlayerLoopInfo.CurrentLoopType + ", " + (t != null));
        //    //Debug.Log("LoadEnd" + PlayerLoopInfo.CurrentLoopType + ", " + ((TextAsset)t).text);


        //    //await UniTask.Yield(PlayerLoopTiming.LastUpdate);
        //    //UnityEngine.Debug.Log("after update:" + Time.frameCount);
        //    ////await UniTask.NextFrame();
        //    ////await UniTask.Yield();
        //    ////UnityEngine.Debug.Log("after update nextframe:" + Time.frameCount);

        //    //StartCoroutine(CoroutineRun2());
        //    ////StartCoroutine(CoroutineRun());
        //    //UnityEngine.Debug.Log("FOO?");

        //    //_ = DelayFrame3_Pre();
        //    //await UniTask.Yield();

        //}));

        //cancelButton.onClick.AddListener(UniTask.UnityAction(async () =>
        //{
        //    _ = DelayFrame3_Post();
        //    await UniTask.Yield();

        //    //await UniTask.Yield(PlayerLoopTiming.LastPreUpdate);
        //    //UnityEngine.Debug.Log("before update:" + Time.frameCount);
        //    //await UniTask.NextFrame();
        //    //await UniTask.Yield();
        //    //UnityEngine.Debug.Log("before update nextframe:" + Time.frameCount);

        //    //StartCoroutine(CoroutineRun());

        //    //UnityEngine.Debug.Log("click:" + PlayerLoopInfo.CurrentLoopType);
        //    //_ = Yieldding();

        //    //var cts = new CancellationTokenSource();

        //    //UnityEngine.Debug.Log("click:" + PlayerLoopInfo.CurrentLoopType + ":" + Time.frameCount);
        //    //var la = SceneManager.LoadSceneAsync("Scenes/ExceptionExamples").WithCancellation(cts.Token);
        //    ////cts.Cancel();
        //    //await la;
        //    //UnityEngine.Debug.Log("End LoadSceneAsync" + PlayerLoopInfo.CurrentLoopType + ":" + Time.frameCount);
        //}));

        //return;
        //await UniTask.SwitchToMainThread();

        //UniTaskAsyncEnumerable.EveryValueChanged(mcc, x => x.MyProperty)
        //    .Do(_ => { }, () => Debug.Log("COMPLETED"))
        //    .ForEachAsync(x =>
        //    {
        //        Debug.Log("VALUE_CHANGED:" + x);
        //    })
        //    .Forget();

        //_ = Test1();
        //Test2().Forget();
        //StartCoroutine(Test3("https://bing.com/"));



        //bool flip = false;
        //var rect = cancelButton.GetComponent<RectTransform>();
        //var cts = new CancellationTokenSource();
        //var ct = cts.Token;
        //okButton.onClick.AddListener(UniTask.UnityAction(async () =>
        //{
        //    await rect.DOMoveX(10f * (flip ? -1 : 1), 3).OnUpdate(() => { Debug.Log("UPDATE YEAH"); }).WithCancellation(ct);
        //    flip = !flip;
        //    // ok.
        //}));
        //cancelButton.onClick.AddListener(() =>
        //{
        //    cts.Cancel();
        //});


        // DG.Tweening.Core.TweenerCore<int>
        //Debug.Log("GO MOVEX");
        //await okButton.GetComponent<RectTransform>().DOMoveX(-10.2f, 3).WithCancellation(CancellationToken.None);
        //Debug.Log("END MOVEX");


        //Debug.Log("AGAIN MOVE");
        //await okButton.GetComponent<RectTransform>().DOMoveY(10.2f, 3).WithCancellation(CancellationToken.None);
        //Debug.Log("AGAIN END MOVE");

        //Debug.Log(Test().GetType().FullName);



        // check stacktrace
        // await UniTaskAsyncEnumerable.EveryUpdate().Where((x, i) => i % 2 == 0).Select(x => x).DistinctUntilChanged().ForEachAsync(x =>
        //{
        // Debug.Log("test");
        //});



        //// DOTween.To(

        //var cts = new CancellationTokenSource();

        ////var tween = okButton.GetComponent<RectTransform>().DOLocalMoveX(100, 5.0f);

        //cancelButton.OnClickAsAsyncEnumerable().ForEachAsync(_ =>
        //{
        //    cts.Cancel();
        //}).Forget();


        //// await tween.ToUniTask(TweenCancelBehaviour.KillAndCancelAwait, cts.Token);

        ////tween.SetRecyclable(true);

        //Debug.Log("END");

        //// tween.Play();

        //// DOTween.

        //// DOVirtual.Float(0, 1, 1, x => { }).ToUniTask();


        //await foreach (var _ in UniTaskAsyncEnumerable.EveryUpdate())
        //{
        //    Debug.Log("Update() " + Time.frameCount);
        //}



        //await okButton.OnClickAsAsyncEnumerable().Where((x, i) => i % 2 == 0).ForEachAsync(_ =>
        //{
        //});


        //okButton.OnClickAsAsyncEnumerable().ForEachAsync(_ =>
        //{


        //foreach (var (type, size) in TaskPool.GetCacheSizeInfo())
        //{
        //    Debug.Log(type + ":" + size);
        //}


        //}).Forget();

        //CloseAsync(this.GetCancellationTokenOnDestroy()).Forget();

        //okButton.onClick.AddListener(UniTask.UnityAction(async () => await UniTask.Yield()));



        //UpdateUniTask().Forget();

        //StartCoroutine(Coroutine());

        // PlayerLoopInfo.Inject();
        await UniTask.Delay(TimeSpan.FromSeconds(1));

        PlayerLoopInfo.DumpPlayerLoop("current", PlayerLoop.GetCurrentPlayerLoop());


        // _ = ReturnToMainThreadTest();

        //GameObject.Destroy(this.gameObject);
    }
Ejemplo n.º 13
0
    async UniTaskVoid Start()
    {
        // UniTask.Delay(TimeSpan.FromSeconds(1)).TimeoutWithoutException


        var currentLoop = PlayerLoop.GetDefaultPlayerLoop();

        PlayerLoopHelper.Initialize(ref currentLoop, InjectPlayerLoopTimings.Minimum); // minimum is Update | FixedUpdate | LastPostLateUpdate



        var cancelToken = new CancellationTokenSource();

        cancelButton.onClick.AddListener(() =>
        {
            cancelToken.Cancel(); // cancel from button click.
        });

        var timeoutToken = new CancellationTokenSource();

        timeoutToken.CancelAfterSlim(TimeSpan.FromSeconds(5)); // 5sec timeout.

        try
        {
            // combine token
            var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancelToken.Token, timeoutToken.Token);

            await UnityWebRequest.Get("http://foo").SendWebRequest().WithCancellation(linkedTokenSource.Token);
        }
        catch (OperationCanceledException ex)
        {
            if (timeoutToken.IsCancellationRequested)
            {
                UnityEngine.Debug.Log("Timeout.");
            }
            else if (cancelToken.IsCancellationRequested)
            {
                UnityEngine.Debug.Log("Cancel clicked.");
            }
            _ = ex;
        }



        // TestAsync(cts.Token).Forget();

        okButton.onClick.AddListener(UniTask.UnityAction(async() =>
        {
            // try timeout
            try
            {
                //await UniTask.Delay(TimeSpan.FromSeconds(2), cancellationToken: timeoutController.Timeout(TimeSpan.FromSeconds(3)));
                UnityEngine.Debug.Log("Delay Complete, Reset(and reuse).");
                //timeoutController.Reset();
            }
            catch (OperationCanceledException ex)
            {
                //UnityEngine.Debug.Log("Timeout! FromTimeout?:" + timeoutController.IsTimeout());
                _ = ex;
            }

            await UniTask.Yield();
        }));

        cancelButton.onClick.AddListener(UniTask.UnityAction(async() =>
        {
            //clickCancelSource.Cancel();

            //RunCheck(PlayerLoopTiming.Initialization).Forget();
            //RunCheck(PlayerLoopTiming.LastInitialization).Forget();
            //RunCheck(PlayerLoopTiming.EarlyUpdate).Forget();
            //RunCheck(PlayerLoopTiming.LastEarlyUpdate).Forget();
            //RunCheck(PlayerLoopTiming.FixedUpdate).Forget();
            //RunCheck(PlayerLoopTiming.LastFixedUpdate).Forget();
            //RunCheck(PlayerLoopTiming.PreUpdate).Forget();
            //RunCheck(PlayerLoopTiming.LastPreUpdate).Forget();
            //RunCheck(PlayerLoopTiming.Update).Forget();
            //RunCheck(PlayerLoopTiming.LastUpdate).Forget();
            //RunCheck(PlayerLoopTiming.PreLateUpdate).Forget();
            //RunCheck(PlayerLoopTiming.LastPreLateUpdate).Forget();
            //RunCheck(PlayerLoopTiming.PostLateUpdate).Forget();
            //RunCheck(PlayerLoopTiming.LastPostLateUpdate).Forget();

            await UniTask.Yield();
        }));

        await UniTask.Yield();
    }
Ejemplo n.º 14
0
    private void Start()
    {
        var playerLoop = UnityEngine.LowLevel.PlayerLoop.GetCurrentPlayerLoop();

        PlayerLoopHelper.Initialize(ref playerLoop);
    }
Ejemplo n.º 15
0
    private async void Start()
    {
        //启动UniTask Player Loop 注册事件
        PlayerLoopHelper.Init();
        if (isShowDebugWindow)
        {
            goDebug.SetActive(true);
        }
        else
        {
            goDebug.SetActive(false);
        }

        if (isShowFPS)
        {
            ResourcesHelper.InstantiatePrefabFromResourceSetDefault("UIFrameShow", UIRoot.instance.GetUIRootCanvasTop().transform);
        }

        Screen.sleepTimeout                    = SleepTimeout.NeverSleep;
        Application.runInBackground            = true;
        Application.targetFrameRate            = TargetFrameRate;
        StaticData.IsABNotFromServer           = isABNotFromServer;
        StaticData.isABUsedYunSever            = isABUsedYunSever;
        StaticData.SelfResourceServerIpAndPort = selfResourceServerIpAndPort;
        StaticData.localVersionGameCode        = versionGameCode;
        StaticData.isOpenGuide                 = isOpenGuide;
#if UNITY_EDITOR
        StaticData.linguisticType = LanguageType;
#else
        switch (Application.systemLanguage)
        {
        case SystemLanguage.Chinese:
        case SystemLanguage.ChineseSimplified:
            StaticData.linguisticType = LinguisticType.Simplified;
            break;

        case SystemLanguage.ChineseTraditional:
            StaticData.linguisticType = LinguisticType.Complex;
            break;

        case SystemLanguage.English:
        case SystemLanguage.Unknown:
            StaticData.linguisticType = LinguisticType.English;
            break;

        default:
            StaticData.linguisticType = LinguisticType.English;
            break;
        }
#endif
        StaticData.GameShowVersion = GameShowVersion;
        StaticData.isShowSelfLog   = isShowSelfLog;
        try
        {
            //播放背景音乐
            GameSoundPlayer.Instance.PlayBgMusic(MusicHelper.BgMusicLogin);
            StaticData.isUseAssetBundle = isUseAssetBundle;
            DontDestroyOnLoad(gameObject);
            gameObject.AddComponentIfNull <GlobalConfigComponent>();
            gameObject.AddComponentIfNull <ResourcesComponent>();
            BundleDownloaderComponent bundleDownloaderComponent = gameObject.AddComponentIfNull <BundleDownloaderComponent>();
            var IsGameVersionCodeEqual = await BundleHelper.IsGameVersionCodeEqual();

            if (!IsGameVersionCodeEqual)
            {
                return;
            }
            // 下载ab包
            await BundleHelper.DownloadBundle();

            GameObject.Destroy(bundleDownloaderComponent);
            //初始化ABManager
            ABManager.Init();
            //数据表格解析
            ParseExcelData parseExcelData = new ParseExcelData();
            StaticData.configExcel = parseExcelData.Init();
            //用来拿取服务器
            StaticData.IsiosRelease     = StaticData.configExcel.GetVertical().IsiosRelease;
            StaticData.IsAndoridRelease = StaticData.configExcel.GetVertical().IsAndoridRelease;
            //Test Excel
            int WarehouseTotal = StaticData.configExcel.GetVertical().WarehouseTotal;
            Debug.Log($"WarehouseTotal:{WarehouseTotal}");
            ////下载好了,声音ab绑定到固定的地方
            //await ResetSoundPlayers();
            //GameSoundPlayer.Instance.PlayBgMusic("BGM");
            //GameSoundPlayer.Instance.PlaySoundEffect("PrintPhotos");
            //ResourcesHelper.CreateUI("UIWait");
            await UniTask.DelayFrame(1);

            //添加SceneManager
            GameObject goSceneManager = new GameObject("SceneManager");
            goSceneManager.transform.parent = transform;
            goSceneManager.AddComponent <SceneManagerComponent>();

            // 设置请求短链接参数
            StaticData.IsUsedLocalDataNotServer = IsUsedLocalDataNotServer;

            /*
             * //加载网关
             * TextAsset gatewayInfo = await ABManager.GetAssetAsync<TextAsset>("GateWayInfo");
             * switch (typeGate)
             * {
             *  case TypeGateWay.Stable:
             *      gatewayInfo = await ABManager.GetAssetAsync<TextAsset>("GateWayInfo");
             *      break;
             *  case TypeGateWay.MZQ:
             *      gatewayInfo = await ABManager.GetAssetAsync<TextAsset>("GateWayInfoMZQ");
             *      break;
             *  case TypeGateWay.YQX:
             *      gatewayInfo = await ABManager.GetAssetAsync<TextAsset>("GateWayInfoYQX");
             *      break;
             *  case TypeGateWay.JLF:
             *      gatewayInfo = await ABManager.GetAssetAsync<TextAsset>("GateWayInfoJLF");
             *      break;
             *  case TypeGateWay.Extranet:
             *      gatewayInfo = await ABManager.GetAssetAsync<TextAsset>("GateWayInfoExtranet");
             *      break;
             * }
             *
             * GateWayInfo gateWayInfo=LitJson.JsonMapper.ToObject<GateWayInfo>(gatewayInfo.text);
             * //StaticData.DebugGreen($"gateWayInfo ip:{gateWayInfo.ipGateWay} port:{gateWayInfo.portGateWay} timeout:{gateWayInfo.timeout}");
             * bool isGateWayReturn = false;
             * string urlGateWay = $"{gateWayInfo.ipGateWay}:{gateWayInfo.portGateWay}";
             * if (!StaticData.IsUsedLocalDataNotServer)
             * {
             *  CSLinkInfo csLinkInfo = new CSLinkInfo() { Sole = SystemInfo.deviceUniqueIdentifier };
             *  csLinkInfo.Sole = string.Empty;//授权使用的唯一id
             *  csLinkInfo.Platform = RegisterPlatform.None;//授权平台
             *
             *  //发起链接请求
             *  StartCoroutine(HttpGateWayManager.Post(urlGateWay, csLinkInfo, gateWayInfo.timeout, (ip, port, Uid) =>
             *  {
             *      StaticData.ipWebSocket = ip;
             *      StaticData.portWebSocket = port;
             *      StaticData.Uid = Uid;
             *      StaticData.DebugGreen($"玩家的uid:{Uid}");
             *      isGateWayReturn = true;
             *  }, (WebErrorCode webErrorCode) =>
             *  {
             *      StaticData.DebugGreen($"webErrorCode:{webErrorCode.ToString()}");
             *      isGateWayReturn = false;
             *  }));
             *
             *  await UniTask.WaitUntil(() => isGateWayReturn == true);
             *  //进行长连接 使用WebSocket
             *  WebSocketComponent._instance.Init();
             * }
             *
             * //获取用户信息
             * bool isGetUserInfo = false;
             * CSEmptyAccountInfo csEmptyAccountInfo = new CSEmptyAccountInfo();
             * OtherProtoHelper.GetUserInfo(csEmptyAccountInfo,(userInfo)=> {
             *  StaticData.playerInfoData.userInfo = userInfo;
             *  TimeHelper.LoginServerTime = StaticData.playerInfoData.userInfo.PresentTime;
             *  StaticData.DebugGreen($"ServerTime:{TimeHelper.ServerTime(TimeHelper.LoginServerTime)}");
             *  isGetUserInfo = true;
             * });
             * await UniTask.WaitUntil(() => isGetUserInfo == true);
             * //加载本地存储的私聊信息/文件
             * StaticData.LoadPrivateChatFile();
             */

            //登录界面
            await StaticData.OpenUILogin(typeGate, null);

            //关闭Init背景
            UIRoot.instance.GoBgInit.SetActive(false);
        }
        catch (Exception e)
        {
            Debug.LogError(e);
        }
    }