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函数中加入,这样在切换网格和获取当前网格体时非常方便。

本节内容就到此为止,希望对大家有所帮助!最后再展示几张效果图:

低饱和度情况,向左滑动以降低饱和度

高饱和度+低粗糙度

高饱和度+高粗糙度