ILRuntime第一课HelloWorld

1.环境配置

a).导入热更需要的文件夹

  • ILRuntime

  • Mono.Cecil.20

  • Mono.Cecil.Pdb

b)设置不安全模式

  • Assets目录里建立一个名为smcs.rsp的文本文件

  • 在smcs.rsp文件中加入 -unsafe

  • 如果你使用的是Unity5.5以上的版本,你需要将上述说明中的smcs.rsp文件名改成mcs.rsp

c)删除一些测试代码

    ​    ​已删除完毕的,可以直接导入的:

    ​    ​链接:http://pan.baidu.com/s/1hsEbpVQ

    ​    ​密码:0yxk


2.编写热更新的工程(HotFix_TestProject)

a)先编译一次主工程,然后导入Assembly-CSharp、UnityEngine、UnityEngine.UI

b)编写工程

c)导出到Unity项目中的StreamingAssets文件夹下面


3.主工程中的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using ILRuntime.Runtime.Enviorment;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
 
public class HelloWorld : MonoBehaviour {
    AppDomain appdomain;
 
 
    void Start()
    {
        StartCoroutine(LoadHotFixAssembly());
    }
 
    IEnumerator LoadHotFixAssembly() {
        appdomain = new ILRuntime.Runtime.Enviorment.AppDomain();
 
        //加载DLL文件
#if UNITY_ANDROID
        WWW www = new WWW(Application.streamingAssetsPath + "/HotFix_TestProject.dll");
#else
        WWW www = new WWW("file:///" + Application.streamingAssetsPath + "/HotFix_TestProject.dll");
#endif
        while (!www.isDone)//如果资源未加载完
            yield return null;
        if (!string.IsNullOrEmpty(www.error))
            Debug.LogError(www.error);
        byte[] dll = www.bytes;
        www.Dispose();
 
        //加载PDB文件
#if UNITY_ANDROID
        www = new WWW(Application.streamingAssetsPath + "/HotFix_TestProject.pdb");
#else
        www = new WWW("file:///" + Application.streamingAssetsPath + "/HotFix_TestProject.pdb");
#endif
        while (!www.isDone)
            yield return null;
 
        if (!string.IsNullOrEmpty(www.error))
            Debug.LogError(www.error);
        byte[] pdb = www.bytes;
        using (System.IO.MemoryStream fs=new System.IO.MemoryStream(dll)) {
            using (System.IO.MemoryStream p=new System.IO.MemoryStream(pdb)) {
                appdomain.LoadAssembly(fs, p, new Mono.Cecil.Pdb.PdbReaderProvider());
            }
        }
 
        InitializeILRuntime();
        OnHotFixLoaded();
    }
 
    //初始化,注册
    void InitializeILRuntime()
    {
 
    }
 
    //调用
    void OnHotFixLoaded() {
        appdomain.Invoke("HotFix_TestProject.InstanceClass""StaticFunTest"null,null);
    }
 
}

发布了40 篇原创文章 · 获赞 12 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章