Skip to content

Latest commit

 

History

History
101 lines (93 loc) · 4.85 KB

README.md

File metadata and controls

101 lines (93 loc) · 4.85 KB

F8 接入HybridCLR

license Unity Version Platform

简介(希望自己点击F8,就能开始制作游戏,不想多余的事)

接入HybridCLR热更新代码组件。

  1. 使用这个官方教程创建HotUpdate程序集后。
  2. 找到代码F8Helper.cs
    • 解除注释状态
    [MenuItem("开发工具/生成并复制热更新Dll-F8")]
    public static void GenerateCopyHotUpdateDll()
    {
        // F8EditorPrefs.SetBool("compilationFinishedHotUpdateDll", false);
        // HybridCLR.Editor.Commands.PrebuildCommand.GenerateAll();
        // FileTools.SafeClearDir(Application.dataPath + "/AssetBundles/Code");
        // FileTools.CheckDirAndCreateWhenNeeded(Application.dataPath + "/AssetBundles/Code");
        // foreach (var dll in HybridCLR.Editor.SettingsUtil.HotUpdateAssemblyNamesExcludePreserved) // 获取HybridCLR设置面板的dll名称
        // {
        //     FileTools.SafeCopyFile(
        //         HybridCLR.Editor.SettingsUtil.GetHotUpdateDllsOutputDirByTarget(EditorUserBuildSettings.activeBuildTarget) + "/" + dll + ".dll",
        //         Application.dataPath + "/AssetBundles/Code/" + dll + ".bytes");
        //     LogF8.LogAsset("生成并复制热更新dll:" + dll);
        // }
        // AssetDatabase.Refresh();
    }
  1. 代码已拆分程序集
    • AOT程序集:(F8Framework.Core)
    • 热更新程序集:(F8Framework.F8ExcelDataClass、F8Framework.Launcher)
  2. 将这两个热更新程序集拖进 HybridCLR 设置面板中
    image
  3. 注意:主工程不能直接引用热更新代码,这里通过反射来调用热更新代码。
    • 在启动场景挂在一个加载dll脚本
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using F8Framework.Core;
using UnityEngine;

public class LoadDll : MonoBehaviour
{
    public IEnumerator Start()
    {
        ModuleCenter.Initialize(this);
        // 在这里可以启动热更新
        HotUpdateManager HotUpdate = ModuleCenter.CreateModule<HotUpdateManager>();
        DownloadManager DownloadManager = ModuleCenter.CreateModule<DownloadManager>();
        AssetManager AssetManager = ModuleCenter.CreateModule<AssetManager>();
        
        // 初始化本地版本
        HotUpdate.InitLocalVersion();

        // 初始化远程版本
        yield return HotUpdate.InitRemoteVersion();
            
        // 初始化资源版本
        yield return HotUpdate.InitAssetVersion();
            
        // 检查需要热更的资源,总大小
        Tuple<Dictionary<string, string>, long> result  = HotUpdate.CheckHotUpdate();
        var hotUpdateAssetUrl = result.Item1;
        var allSize = result.Item2;
        
        // 资源热更新
        HotUpdate.StartHotUpdate(hotUpdateAssetUrl, () =>
        {
            LogF8.Log("完成");
            // Editor环境下,HotUpdate.dll.bytes已经被自动加载,不需要加载,重复加载反而会出问题。
#if !UNITY_EDITOR
            TextAsset asset1 = AssetManager.Instance.Load<TextAsset>("F8Framework.F8ExcelDataClass");
            Assembly hotUpdateAss1 = Assembly.Load(asset1.bytes);
            TextAsset asset2 = AssetManager.Instance.Load<TextAsset>("F8Framework.Launcher");
            Assembly hotUpdateAss2 = Assembly.Load(asset2.bytes);
#else
            // Editor下无需加载,直接查找获得HotUpdate程序集
            Assembly hotUpdateAss = System.AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "F8Framework.F8ExcelDataClass");
            Assembly hotUpdateAss2 = System.AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "F8Framework.Launcher");
#endif
            Type type = hotUpdateAss2.GetType("F8Framework.Launcher.GameLauncher");
            // 添加组件
            gameObject.AddComponent(type);
        }, () =>
        {
            LogF8.Log("失败");
        }, progress =>
        {
            LogF8.Log("进度:" + progress);
        });
    }
}

导入插件(需要首先导入HybridCLR)

注意!HybridCLR:https://github.com/focus-creative-games/hybridclr_unity.git
方式一:直接下载文件,放入Unity
方式二:Unity->点击菜单栏->Window->Package Manager->点击+号->Add Package from git URL->输入:https://github.com/focus-creative-games/hybridclr_unity.git