Exemplo n.º 1
0
        /// <summary>
        /// 异步初始化
        /// </summary>
        public static InitializationOperation InitializeAsync(InitializeParameters parameters)
        {
            if (parameters == null)
            {
                throw new Exception($"YooAsset create parameters is null.");
            }

            if (parameters.LocationServices == null)
            {
                throw new Exception($"{nameof(IBundleServices)} is null.");
            }
            else
            {
                _locationServices = parameters.LocationServices;
            }

#if !UNITY_EDITOR
            if (parameters is EditorSimulateModeParameters)
            {
                throw new Exception($"Editor simulate mode only support unity editor.");
            }
#endif

            // 创建驱动器
            if (_isInitialize == false)
            {
                _isInitialize = true;
                UnityEngine.GameObject driverGo = new UnityEngine.GameObject("[YooAsset]");
                driverGo.AddComponent <YooAssetDriver>();
                UnityEngine.Object.DontDestroyOnLoad(driverGo);
            }
            else
            {
                throw new Exception("YooAsset is initialized yet.");
            }

            // 检测参数范围
            if (parameters.AssetLoadingMaxNumber < 1)
            {
                parameters.AssetLoadingMaxNumber = 1;
                YooLogger.Warning($"{nameof(parameters.AssetLoadingMaxNumber)} minimum value is 1");
            }
            if (parameters.OperationSystemMaxTimeSlice < 30)
            {
                parameters.OperationSystemMaxTimeSlice = 30;
                YooLogger.Warning($"{nameof(parameters.OperationSystemMaxTimeSlice)} minimum value is 30 milliseconds");
            }

            // 鉴定运行模式
            if (parameters is EditorSimulateModeParameters)
            {
                _playMode = EPlayMode.EditorSimulateMode;
            }
            else if (parameters is OfflinePlayModeParameters)
            {
                _playMode = EPlayMode.OfflinePlayMode;
            }
            else if (parameters is HostPlayModeParameters)
            {
                _playMode = EPlayMode.HostPlayMode;
            }
            else
            {
                throw new NotImplementedException();
            }

            // 初始化异步操作系统
            OperationSystem.Initialize(parameters.OperationSystemMaxTimeSlice);

            // 初始化下载系统
            if (_playMode == EPlayMode.HostPlayMode)
            {
#if UNITY_WEBGL
                throw new Exception($"{EPlayMode.HostPlayMode} not supports WebGL platform !");
#else
                var hostPlayModeParameters = parameters as HostPlayModeParameters;
                DownloadSystem.Initialize(hostPlayModeParameters.BreakpointResumeFileSize);
#endif
            }

            // 初始化资源系统
            InitializationOperation initializeOperation;
            if (_playMode == EPlayMode.EditorSimulateMode)
            {
                _editorSimulateModeImpl = new EditorSimulateModeImpl();
                _bundleServices         = _editorSimulateModeImpl;
                AssetSystem.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
                var editorSimulateModeParameters = parameters as EditorSimulateModeParameters;
                initializeOperation = _editorSimulateModeImpl.InitializeAsync(
                    editorSimulateModeParameters.LocationToLower,
                    editorSimulateModeParameters.SimulatePatchManifestPath);
            }
            else if (_playMode == EPlayMode.OfflinePlayMode)
            {
                _offlinePlayModeImpl = new OfflinePlayModeImpl();
                _bundleServices      = _offlinePlayModeImpl;
                AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
                initializeOperation = _offlinePlayModeImpl.InitializeAsync(parameters.LocationToLower);
            }
            else if (_playMode == EPlayMode.HostPlayMode)
            {
                _hostPlayModeImpl = new HostPlayModeImpl();
                _bundleServices   = _hostPlayModeImpl;
                AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
                var hostPlayModeParameters = parameters as HostPlayModeParameters;
                initializeOperation = _hostPlayModeImpl.InitializeAsync(
                    hostPlayModeParameters.LocationToLower,
                    hostPlayModeParameters.ClearCacheWhenDirty,
                    hostPlayModeParameters.DefaultHostServer,
                    hostPlayModeParameters.FallbackHostServer);
            }
            else
            {
                throw new NotImplementedException();
            }

            // 监听初始化结果
            initializeOperation.Completed += InitializeOperation_Completed;
            return(initializeOperation);
        }
Exemplo n.º 2
0
 internal HostPlayModeUpdateStaticVersionOperation(HostPlayModeImpl impl, int timeout)
 {
     _impl    = impl;
     _timeout = timeout;
 }
Exemplo n.º 3
0
 internal HostPlayModeUpdatePackageOperation(HostPlayModeImpl impl, int resourceVersion, int timeout)
 {
     _impl            = impl;
     _resourceVersion = resourceVersion;
     _timeout         = timeout;
 }
 internal HostPlayModeInitializationOperation(HostPlayModeImpl impl)
 {
     _impl = impl;
 }