ue编辑器 ue编辑器格式化json
完成本期任务的效果如下所示:
对于新手来说,这一节提供了大量实用的信息,高手可以略过,直接进入操作吧!
创建一个UE5的C++空白项目,务必选择C++选项,初学者可以根据个人需求决定是否勾选初学者包。
在UE5的C++文件夹中,右键新建一个C++类,选择父类为Actor,然后输入名称并创建该类。
Material_Actor.h文件需要添加以下代码:
在Material_Actor.cpp文件中实现CreateStaticMesh()和CreateStaticMeshAlone()函数。由于需要创建多个网格体,因此我们定义了一个CreateStaticMeshAlone函数用于单独生成网格体,而CreateStaticMesh则在构造函数AMaterial_Actor中被调用。
注意:创建网格体的函数需要放在构造函数中执行!
编译完成后,你应该能够看到Material_Actor类。
到目前为止,BP_Material_Actor的5个静态网格体已创建完成,但材质部分仍使用的是系统默认材质。接下来,我们需要解决三个问题:
1:使用自定义材质
2:在运行时动态修改材质参数
3:UI与材质交互
新建一个材质作为模板。由于材质制作不是本节重点,未来会有专门的教程讲解。对此有兴趣或不懂的同学建议查阅材质蓝图相关资料。在这里,我们仅介绍如何设置材质,如下图所示。
在材质蓝图中,我定义了两个参数,一个是法线参数,一个是Saturation饱和度参数。
你可以使用C++或蓝图创建动态材质实例。C++的代码如下:
注意:CreateMaterialInstaceDynamic函数需要在构造函数中实现。注意ColorMaterial_Inst容易被销毁,可能导致UE5崩溃,因此应使用ColorMaterial_Inst->AddToRoot();确保其不被销毁。虽然代码方式灵活,但调试难度较大,容易引发崩溃问题,具体解决方案可以参考:
在C++中通过代码给材质中参数设置数据:
为了便于调试动态材质实例,我选择使用蓝图创建。函数CreateMaterialToActor用于单独生成动态材质实例,定义如下:
接下来,在BP_Material_Actor构造函数中,为每一个静态网格体调用,如下图所示:
定义SetMaterialSaturation函数,如下:
我将UI命名为BP_MainUI,双击打开。UMG制作UI不是本节重点,因此忽略。如果不熟悉,建议学习相关教程,如下图所示创建UI:
创建饱和度的OnValueChange事件,这样可以在滑动时根据返回值调整Saturation参数来调节饱和度。
关于UI如何获取Actor,我们可以在UI中定义一个BP_MaterialActor变量,并通过关卡蓝图传入。
打开关卡蓝图,在场景中放入BP_MaterialActor。在关卡蓝图的开始事件中创建MainUI,并设置饱和度事件响应函数。
GetCurrentMeshComponent代码如下:
法线调整蓝图如下:
这个功能也在C++中实现。Material_Actor.h中声明了用于切换网格的函数,命名为SwitchMesh。实现方法如下:
MeshIndex记录当前网格体,MeshArr存储所有网格体。MeshArr数据在CreateStaticMeshAlone函数中加入,这样在切换网格和获取当前网格体时非常方便。
本节内容就到此为止,希望对大家有所帮助!最后再展示几张效果图:
低饱和度情况,向左滑动以降低饱和度
高饱和度+低粗糙度
高饱和度+高粗糙度