UE5中的Live Coding(新的热重载)
前言
虚幻5把热重载更精进了一步,真的热重载是来了!
以前工作的时候写Java,比较头疼的问题就是开发业务出现Bug,每次进行测试,都需要关掉运行程序,重新启动才能将新的逻辑应用。但是后来Java引入了热重载机制,允许你不关闭运行程序,直接将新编写的代码加载到应用逻辑中,大大提升了开发效率。
虚幻4中,Eipc也加入了热重载,主要是让开发者在项目编码过程中,不需要关闭引擎编辑器,将新编写的逻辑,编译后加载到引擎中。但需要先关闭运行的项目,然后再重新运行,才能看到加入的逻辑结果。
虚幻5对此进行了改进,新的热重载,不需要你关闭运行的项目工程,在调整后直接编译即可加载新的逻辑到程序中,这可以有效提升了开发效率。
操作
1、编译方式变化
虚幻5中,热重载功能默认是开启的,由此带来了新的问题,如果你通过Rider(JetBrains Rider 2022.2.1 Build #RD-222.3739.37)启动引擎(非调试模式启动),编译代码会提示如下错误:
|
|
查看日志细节可以看到相关说明,主要是说需要使用快捷键“Ctrl+Alt+F11”来完成编译。
|
|
2、使用新热重载
例如新建一个Userwidget类,并在类内编写一个函数,暴露到蓝图中,函数声明和定义结构如下:
|
|
在引擎中,继承UMG类,并添加到视口中,通过按钮调用CallFun函数。运行工程,测试点击按钮,你会在控制台看到输出日志
LogTemp: Hello
注意,这个时候,不关闭运行程序,直接修改源码中函数CallFun内逻辑,如下:
|
|
然后使用快捷键Ctrl+Alt+F11进行编译,再次点击按钮,控制台将输出日志
LogTemp: Hello Jam
这就是新的热重载,不需要你关闭运行程序,即可加载新的执行逻辑!这在复杂逻辑设计中修改Bug时非常有用!
3、关闭热重载
关闭热重载的方法很简单,可以到编辑器偏好设置中找到实时代码编写,去掉启用实时代码编写的勾。或是在编辑器中右下角编译按钮旁边找到设置,也可以关闭。具体参照下图:
关闭Livecoding后,在Rider中即可恢复使用之前的编译方式,也不会在提示编译操作错误。总结
使用热重载时,应该尽量避免以下操作,这将导致热重载失败无效。
- 可以增加普通函数,不要增反射函数(UFUNCTION标注)
- 可以增加普通属性,不要增反射属性(UPROPERTY标注)
- 可以删除普通函数和属性,不可以删除反射函数和属性(UFUNCTION和UPROPERTY标记)
- 可以添加新的U类,但不能删除已经被使用(实例化)U类
- 可以添加普通类,但不要删除被使用的类(实例化)
- 不要修改已经编译好的反射函数(UFUNCTION标记)的返回类型,函数名称,参表
- 不要修改已经编译好的反射属性(UPROPERTY标记)名称或类型
- 不要修改U类的名称或是说明符
- 添加新的成员函数(普通)第一次编译后可能会提示找不到标识符,可以再次编译解决问题
- 可以修改普通函数的名称,返回类型,参表。可以修改普通属性的类型,参数名称
最后提醒:在测试过程中发现普通属性和函数的调整,有概率导致出错,综合来看,尽量只调整逻辑部分,不要调整结构部分。
引擎版本:5.2
Rider版本:JetBrains Rider 2022.2.1 Build #RD-222.3739.37