UE4 编辑器模块引用,不影响打包处理

1. *.Build.cs 引用编辑器模块

        构造函数:       

        //编辑器模块
        if (Target.bBuildEditor)//或者if (Target.Type == TargetType.Editor)
        {
            PublicDependencyModuleNames.AddRange(new string[] {
                "UnrealEd",

                "MeshDescription",

                "RawMesh",

                //"*****",//其他编辑器模块
            });
        }

1.1 *Editor.Build.cs

        PublicDependencyModuleNames
        PrivateDependencyModuleNames
                添加编辑器模块        

2. *.cpp 实现

        #if WITH_EDITOR

                编辑器头文件

                或应用的编辑器实现

        #else 

                非编辑器实现

        #endif

(1)引用编辑器头文件 ,例如

#if WITH_EDITOR
  #include "Factories/MaterialFactoryNew.h"
  #include "Runtime\Engine\Classes\Materials\MaterialExpressionTextureSample.h"
#endif

 (2)实现,例如

FString fName = FPaths::GetBaseFilename(fsTex);
        UTexture2D*  DiffuseTexture = FCCommonFun::GetLocalTexture(fsTex, TEXT("/***Design/***_Texture/")/*,false,false*/);

        FString MaterialBaseName = "M_";
        MaterialBaseName += fName;
        FString PackageName = "/***Design/***_Material/";
        PackageName += MaterialBaseName;
        UPackage* Package = CreatePackage(NULL, *PackageName);
        FString sMaterialResouce = TEXT("Material'") + PackageName + TEXT(".") + MaterialBaseName + TEXT("'");
        UMaterialInterface * ScreenMaterial0 = Cast<UMaterialInterface>(StaticLoadObject(UMaterialInterface::StaticClass(), nullptr, *sMaterialResouce));
        if (IsValid(ScreenMaterial0))
        {
            m_RMaterialMap.Add(ScreenMaterial0);
        }
        else
        {
#if WITH_EDITOR
            auto MaterialFactory = NewObject<UMaterialFactoryNew>();
            UMaterial* UnrealMaterial00 = (UMaterial*)MaterialFactory->FactoryCreateNew(UMaterial::StaticClass(), Package, *MaterialBaseName, RF_Standalone | RF_Public, NULL, GWarn);

            Package->SetDirtyFlag(true);


            //make texture sampler
            UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(UnrealMaterial00);
            TextureExpression->Texture = DiffuseTexture;
            TextureExpression->SamplerType = SAMPLERTYPE_Color;
            UnrealMaterial00->Expressions.Add(TextureExpression);
            UnrealMaterial00->BaseColor.Expression = TextureExpression;

            FAssetRegistryModule::AssetCreated(UnrealMaterial00);

            UnrealMaterial00->PreEditChange(NULL);
            UnrealMaterial00->PostEditChange();

            m_RMaterialMap.Add(UnrealMaterial00);
#else
                UMaterialInterface * ScreenMaterial1 = Cast<UMaterialInterface>(StaticLoadObject(UMaterialInterface::StaticClass(), nullptr, TEXT("Material'/Game/GS_Material/NewMaterial.NewMaterial'")));
                UMaterialInstanceDynamic* UnrealMaterialDynamic = UMaterialInstanceDynamic::Create(ScreenMaterial1, NULL);
                UnrealMaterialDynamic->SetTextureParameterValue("BaseTex", DiffuseTexture);//修改材质实例的参数
                m_RMaterialMap.Add(UnrealMaterialDynamic);
                FAssetRegistryModule::AssetCreated(UnrealMaterialDynamic);

#endif //WITH_EDITOR
        }
       Package->FullyLoad();

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值