1
1
# PureScript
2
- Unity上的C#热更框架,基于Mono的[ MONO_AOT_MODE_INTERP] ( https://www.mono-project.com/news/2017/11/13/mono-interpreter/ ) 模式。自动绑定Unity的Il2cpp代码。
2
+
3
+ [ ![ license] ( http://img.shields.io/badge/license-MIT-blue.svg )] ( https://github.com/loongly/PureScript/blob/master/LICENSE )
4
+ [ ![ PRs Welcome] ( https://img.shields.io/badge/PRs-welcome-blue.svg )] ( https://github.com/loongly/PureScript/pulls )
5
+
6
+
7
+ 一个支持Unity3D的C#热更框架,基于Mono的[ MONO_AOT_MODE_INTERP] ( https://www.mono-project.com/news/2017/11/13/mono-interpreter/ ) 模式。
8
+
9
+
10
+ > 支持在iOS平台Assembly.Load
11
+ > 构建时自动绑定Unity的Il2cpp代码。
12
+ > 支持大部分Unity特性,包括MonoBehaviour、Coroutine。
13
+ > 支持配置程序集运行环境(Il2cpp/aot/interp)
14
+ > 支持` Cocoapods ` 自动集成
15
+ > 支持对"magic code"的自定义绑定实现
3
16
4
17
-------------------------------------------
5
18
## iOS平台
@@ -9,11 +22,14 @@ Unity上的C#热更框架,基于Mono的[MONO_AOT_MODE_INTERP](https://www.mono-p
9
22
使用jit模式运行,可以导出Il2cpp工程,添加ScriptEngine项目断点调试。
10
23
11
24
## Andrroid平台
12
- 请直接使用 ` Assembly.Load ` ,同使用PureScript是等效的。
25
+ 请使用Unity的Mono运行时,可以直接调用 ` Assembly.Load ` ,同使用PureScript是等效的,工程结构无需修改 。
13
26
14
27
---------------------------------------------------
15
28
## 使用
16
- Clone本工程,拷贝DemoProject/Assets/Plugins/PureScript目录
29
+ 1 . Clone本工程,拷贝DemoProject/Assets/Plugins/PureScript目录。
30
+ 2 . 修改 PureScriptBuilder.cs及ScriptEngine/Tools/config.json中的路径配置。
31
+ 3 . config.json中配置运行在interpreter模式的dll(否则以aot运行),以及运行在Il2cpp运行时内的dll(一般用作Adapter)。
32
+
17
33
+ iOS平台需要安装[ Cocoapods] ( https://cocoapods.org/ ) 和[ Ninja] ( https://ninja-build.org/ ) 。在项目的podfile内添加PureScript引用。
18
34
例: * /iOS/Podfile-example
19
35
然后
@@ -22,7 +38,7 @@ Clone本工程,拷贝DemoProject/Assets/Plugins/PureScript目录
22
38
23
39
24
40
25
- + Windows平台仅用来调试用 ,在构建项目后,编译 ScriptEngine/ScriptEngine.vcxproj,替换原来Plugins目录下的的dll,或者导出Il2cpp工程添加ScriptEngine .vcxproj项目调试运行。
41
+ + Windows平台仅用来调试 ,在构建项目后,编译 ScriptEngine/ScriptEngine.vcxproj,替换原来Plugins目录下的的dll,或者导出Il2cpp的工程添加ScriptEngine .vcxproj项目调试运行。
26
42
27
43
28
44
## 例子
@@ -40,22 +56,25 @@ Clone本工程,拷贝DemoProject/Assets/Plugins/PureScript目录
40
56
--------------------------------------------
41
57
42
58
## 实现
43
- PureScript 附带了Mono运行时,代码生成器 ,实现了两种绑定方式。两种方式均在构建时自动生成绑定代码,调用方几乎无感知,具体参考DemoProject。
59
+ PureScript 封装了Mono运行时,c/csharp代码生成器,pod项目自动集成 ,实现了两种绑定方式。两种方式均在构建时自动生成绑定代码,调用方几乎无感知,具体参考DemoProject。
44
60
两种绑定均支持调用和回调。
45
61
46
62
* Internal call 绑定:
47
- 由c/cpp实现,直接使用Unity的dll,同时把Unity的Internal call重定向到UnityPlayerEngine实现 ,调用方无需修改。
63
+ 由c/cpp实现,直接使用Unity的dll,同时把Unity的Internal call绑定到UnityEngine实现,几乎没有性能损失 ,调用方无需修改。
48
64
例:ScriptEngine/generated/icall_binding_gen.c。
49
- 如果碰到“Unity magic”代码自动绑定无效 ,可以实现自己的绑定。
65
+ 如果碰到“Unity magic”代码自动绑定有问题 ,可以实现自己的绑定。
50
66
例:ScriptEngine/custom/icall_binding.c。
51
67
或者在CSharp层用Adapter绑定。
52
68
53
69
54
70
* Adapter绑定:
55
- 由纯CSharp实现,具有更好的兼容和灵活性。Mono运行时内的dll调用Il2cpp内的dll时用到,配置需要运行在Il2cpp内又需要在Mono内调用的dll ,构建时自动生成绑定代码,调用时自动替换到绑定代码,调用方无需修改。
71
+ 由纯CSharp实现,分别在Mono端和Il2cpp端生成绑定代码, 具有更好的兼容和灵活性。Mono运行时内的dll调用Il2cpp内的dll时用到,在config.json中配置需要运行在Il2cpp内又需要在Mono内调用的dll ,构建时自动生成绑定代码,在aot执行 ,调用时自动替换到绑定代码,调用方无需修改。
56
72
例:DemoProject/* /AdapterTest
57
73
58
74
----------------------------------
59
75
76
+ 正式项目请将Mono库(mono* .dll/mono* .a) 替换为自己[ 编译] ( https://github.com/mono/mono/tree/master/sdks ) 的。
77
+
60
78
如果大家对这个方案有兴趣再补充详细文档,同时欢迎提交PR或者Star。
61
79
80
+
0 commit comments