Example #1
0
 /// <summary>
 /// 初始化资源系统
 /// 注意:在使用AssetSystem之前需要初始化
 /// </summary>
 public static void Initialize(bool simulationOnEditor, int loadingMaxNumber, IDecryptionServices decryptionServices, IBundleServices bundleServices)
 {
     _simulationOnEditor = simulationOnEditor;
     _loadingMaxNumber   = loadingMaxNumber;
     DecryptionServices  = decryptionServices;
     BundleServices      = bundleServices;
 }
Example #2
0
 /// <summary>
 /// 初始化资源系统
 /// 注意:在使用AssetSystem之前需要初始化
 /// </summary>
 public static void Initialize(string locationRoot, bool simulationOnEditor, IBundleServices bundleServices, IDecryptServices decryptServices)
 {
     if (_isInitialize == false)
     {
         _isInitialize      = true;
         LocationRoot       = AssetPathHelper.GetRegularPath(locationRoot);
         SimulationOnEditor = simulationOnEditor;
         BundleServices     = bundleServices;
         DecryptServices    = decryptServices;
     }
     else
     {
         throw new Exception($"{nameof(AssetSystem)} is already initialized");
     }
 }
        private AssetBundleManifest LoadUnityManifest()
        {
            IBundleServices bundleServices = this as IBundleServices;
            string          loadPath       = bundleServices.GetAssetBundleLoadPath(PatchDefine.UnityManifestFileName);
            AssetBundle     bundle         = AssetBundle.LoadFromFile(loadPath);

            if (bundle == null)
            {
                return(null);
            }

            AssetBundleManifest result = bundle.LoadAsset <AssetBundleManifest>("AssetBundleManifest");

            bundle.Unload(false);
            return(result);
        }
Example #4
0
        /// <summary>
        /// 初始化资源系统
        /// 注意:在使用AssetSystem之前需要初始化
        /// </summary>
        public static void Initialize(string locationRoot, bool simulationOnEditor, int runtimeMaxLoadingCount, IBundleServices bundleServices, IDecryptServices decryptServices)
        {
            if (_isInitialize == false)
            {
                _isInitialize = true;

                if (runtimeMaxLoadingCount < 3)
                {
                    runtimeMaxLoadingCount = 3;
                    MotionLog.Warning("AssetSystem RuntimeMaxLoadingCount minimum is 3");
                }

                LocationRoot           = AssetPathHelper.GetRegularPath(locationRoot);
                SimulationOnEditor     = simulationOnEditor;
                RuntimeMaxLoadingCount = runtimeMaxLoadingCount;
                BundleServices         = bundleServices;
                DecryptServices        = decryptServices;
            }
            else
            {
                throw new Exception($"{nameof(AssetSystem)} is already initialized");
            }
        }
Example #5
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);
        }
Example #6
0
    /// <summary>
    /// 创建游戏模块
    /// </summary>
    private IEnumerator CreateGameModules()
    {
        // 创建事件管理器
        MotionEngine.CreateModule <EventManager>();

        // 创建变体规则集合
        var variantRules = new List <VariantRule>();
        {
            var rule1 = new VariantRule();
            rule1.VariantGroup = new List <string>()
            {
                "EN", "KR"
            };
            rule1.TargetVariant = Language == ELanguage.Default ? VariantRule.DefaultTag : Language.ToString();
            variantRules.Add(rule1);

            var rule2 = new VariantRule();
            rule2.VariantGroup = new List <string>()
            {
                "HD"
            };
            rule2.TargetVariant = Quality == EQuality.Default ? VariantRule.DefaultTag : Quality.ToString();
            variantRules.Add(rule2);
        }

        // 资源服务接口
        IBundleServices bundleServices = null;

        if (SkipCDN)
        {
            var localBundleServices = new LocalBundleServices(variantRules);
            yield return(localBundleServices.InitializeAsync(SimulationOnEditor));

            bundleServices = localBundleServices;
        }
        else
        {
            string myWebServer = "127.0.0.1";
            string myCDNServer = "127.0.0.1";

            var patchCreateParam = new PatchManager.CreateParameters();
            patchCreateParam.ServerID   = PlayerPrefs.GetInt("SERVER_ID_KEY", 0);
            patchCreateParam.ChannelID  = 0;
            patchCreateParam.DeviceID   = 0;
            patchCreateParam.TestFlag   = PlayerPrefs.GetInt("TEST_FLAG_KEY", 0);
            patchCreateParam.CheckLevel = ECheckLevel.CheckSize;
            patchCreateParam.WebServers = new Dictionary <RuntimePlatform, string>();
            patchCreateParam.WebServers.Add(RuntimePlatform.Android, $"{myWebServer}/WEB/Android/GameVersion.php");
            patchCreateParam.WebServers.Add(RuntimePlatform.IPhonePlayer, $"{myWebServer}/WEB/Iphone/GameVersion.php");
            patchCreateParam.CDNServers = new Dictionary <RuntimePlatform, string>();
            patchCreateParam.CDNServers.Add(RuntimePlatform.Android, $"{myCDNServer}/CDN/Android");
            patchCreateParam.CDNServers.Add(RuntimePlatform.IPhonePlayer, $"{myCDNServer}/CDN/Iphone");
            patchCreateParam.DefaultWebServerIP = $"{myWebServer}/WEB/PC/GameVersion.php";
            patchCreateParam.DefaultCDNServerIP = $"{myCDNServer}/CDN/PC";
            patchCreateParam.VariantRules       = variantRules;

            PatchManager patchManager = MotionEngine.CreateModule <PatchManager>(patchCreateParam);
            yield return(patchManager.InitializeAync());

            bundleServices = MotionEngine.GetModule <PatchManager>();

            EventManager.Instance.AddListener <PatchEventMessageDefine.PatchStatesChange>(OnHandleEventMessage);
            EventManager.Instance.AddListener <PatchEventMessageDefine.OperationEvent>(OnHandleEventMessage);
        }

        // 创建资源管理器
        var resourceCreateParam = new ResourceManager.CreateParameters();

        resourceCreateParam.LocationRoot        = GameDefine.AssetRootPath;
        resourceCreateParam.SimulationOnEditor  = SimulationOnEditor;
        resourceCreateParam.BundleServices      = bundleServices;
        resourceCreateParam.DecryptServices     = null;
        resourceCreateParam.AutoReleaseInterval = 10f;
        MotionEngine.CreateModule <ResourceManager>(resourceCreateParam);

        if (SkipCDN)
        {
            // 开始游戏
            StartGame();
        }
        else
        {
            // 初始化补丁窗口
            yield return(PatchWindow.Instance.InitializeAsync());

            WaitForSeconds waiting = new WaitForSeconds(1f);
            yield return(waiting);

            // 开始补丁更新流程
            PatchManager.Instance.Download();
        }
    }