-
-
Notifications
You must be signed in to change notification settings - Fork 377
best_practices
walon edited this page May 29, 2022
·
4 revisions
由于很容易遇到类型裁剪及AOT泛型实例化引发的问题,推荐先在Win版本测试通过了,再打android和ios包,能极大节省时间。
推荐使用2020系列中的2020.3.33版本,最稳定。2019属于支持,但很快废弃的版本;2021版本Unity还有大量bug,我们正谨慎跟进。
推荐将启动脚本挂载到启动热更新场景,这样可以零改动将非热更新工程改造成热更新工程,还不需要任何反射操作。
以Update函数为例,大多数人会想到主工程跟热更部分的交互像这样
var klass = ass.GetType("App");
var method = klass.GetMethod("Update");
method.Invoke(null, new object[] {deltaTime});
这种方式的缺点是反射成本高,万一带参数,还有额外gc,其实完全有更高效的办法。主要有两种方式:
// 热更新部分
class App
{
public static Action<float> GetUpdateDelegate()
{
return Update;
}
public static void Update(float deltaTime)
{
}
}
// 主工程
var klass = ass.GetType("App");
var method = klass.GetMethod("GetUpdateDelegate");
var updateDel = (Action<float>)method.Invoke(null, null);
updateDel(deltaTime);
var klass = ass.GetType("App");
var method = klass.GetMethod("Update");
updateDel = System.Delegate.CreateDelegate(typeof(Action<float>), null, method);
updateMethod(deltaTime);