我又来了,最近更新频率有所降低并不是我没有学到什么新的知识,只是最近工作有点忙加上 鼻炎引起发烧 然后又因为发烧引起上火口腔溃疡 什么的都来了。 所以大家工作在忙也要照顾好自己的身体
进入正题
今天我们来讲讲如何利用代码去修改我们的材质实例资源里面的参数并保存下来、创建蓝图、以代码的方式添加组件到蓝图内,首先我们来分析一下这篇博客涉及到的知识——
1.如何修改材质实例的编辑器参数
2.创建出蓝图
3.为蓝图中添加响应的组件或者是添加相应的静态网格组件
4.保存资源
5. 最后一点也是最难的一点(以上4点都在不打开编辑器的情况下去操作)
好了废话不多说,我们直接开始吧
首先分析一个点就是我们需要不打开编辑器的情况下去执行这些操作就必须让引擎识别到我们不需要打开编辑器又能运行我们的代码,这里最直接的就是使用commendlet的方式去操作了。因为commendlet的执行顺序是高于启动编辑器的。
关于commendlet的相关介绍可以看会我之前的博客有一期是有讲这个的。现在我们来写一个我们自己的commendlet
下面仅供参考——不完整示例
.h
UCLASS()
class UMyCommandlet : public UCommandlet
{
GENERATED_UCLASS_BODY()
/** Runs the commandlet */ //这里是我们commandlet的入口 其实和控制台应用程序一样
virtual int32 Main(const FString& Params) override;
public:
//示例 更改材质参数函数
void ChangeMatParam();
//示例创建蓝图函数
void CreateBlueprint();
private:
//我们自己创建一个世界
class FPreviewScene* Scene;
.cpp
int32 UMyCommandlet ::Main(const FString& Params)
{
ChangeMatParam();
CreateBlueprint();
}
void ChangeMatParam()
{
//首先我们先基于一个材质实例或者材质去创建一个材质
//这里不创建也行直接把想要修改的材质加载上来就好了
class UMaterialInterface* InParentMat = LoadObject<UMaterialInterface>(NULL, TEXT("父材质的路径"), NULL, LOAD_None, NULL);
FString NewMaterialPath = "这里是新创建的材质想保存的位置";
// Make sure we have a parent
if (!ensure(InParentMat))
{
return 1;
}
FString MaterialFullName = FPaths::GetBaseFilename(NewMaterialPath );
// The material could already exist in the project
FString BasePackageName = (FPaths::GetPath(NewMaterialPath )+TEXT("/")+MaterialFullName);
const FString Suffix(TEXT("")