UE4灯光批量修改插件(如:把关卡中选中的灯光的光照强度同时乘以1.5倍)(C++篇)
2020-12-13 14:14
标签:ted led splay slot hang opened 编辑器 必须 现在 C++:首先我们需要创建一个插件类,个人建议使用UE4插件界面创建,该好处会把一些基础类给你创建出来,我使用的是编辑器模式类插件 该插件可在窗口模式那里创建新的窗口 类创建好之后我们就可以看见UE4自身帮你创建了三个类(XXclass,XXModeclass,XXModeToolkitclass),我们写UI层逻辑主要是在XXModeToolkitclass这个类里面写,该类里面就Init()函数就是用来写SlateUI的,其中的ToolkitWidget变量是该SlateUI的最低层的UI,一般情况你不需要改变它,当然,你如果不需要SBorder类,而且其他类可以改变它 其中的绑定函数IsEnabled_Static()有一个_Static()的意思是你需要绑定的函数必须前面加static,当然你不传入其他参数可以直接使用IsEnabled(this,&Locals::XXXX)该绑定函数,有可能有些人不想用静态函数,那你们可以使用IsEnabled_Raw()该函数(我后面会使用到),如果有不清楚的可以查看SLATE_EVENT()该函数的各种定义,如果有时间我也可以粗略讲解一下。 创建各个SlateUI的过程就不一一赘述,可查看代码观看(我写这个很多地方都是参考UE4源码来写的,如果不想局限于UMG可以多看看UMG对应的SlateUI写法,对写插件会有很多帮助): 现在的地方就是我们需要创建多少个参数项,如果我们都是创建修改一个float型控件如果都直接写在上面那个SlateUI结构里面太费时间,但如果我们用for循环来创建控件,当响应的时候并不知道是创建的哪个指针响应的值,比如创建SSpinBox 当你多传入一个值是,那你绑定函数则也需要多输入一个值: 这样就可以让知道我们响应的是哪一个指针。 现在我们需要知道美术会在关卡中选择哪些资源,那我们需要用到UE4提供的GetSelectedActors(): 如果我们有其他插件也修改过灯光,比如前面我写的类LODlight的灯光控件,我怎么才能使用到那个插件库,并一起批量修改,我当时想的方法就是把他们包含到一个.uplugin中(意思就是把两个插件合成一个插件,这样方便另一个同插件库调用): 这样我们的批量修改灯光控件就可以在自身的.cs文件里面添加该库: 如果想查看完整代码:https://github.com/a948022284/UE4SpecialLightEditorPlugins UE4灯光批量修改插件(如:把关卡中选中的灯光的光照强度同时乘以1.5倍)(C++篇) 标签:ted led splay slot hang opened 编辑器 必须 现在 原文地址:https://www.cnblogs.com/monocular/p/11555900.htmlSAssignNew(ToolkitWidget, SBorder)
.HAlign(HAlign_Fill)
.Padding(25)
.IsEnabled_Static(&Locals::IsWidgetEnabled)
SAssignNew(ToolkitWidget, SBorder)
.HAlign(HAlign_Fill)
.Padding(25)
.IsEnabled_Static(&Locals::IsWidgetEnabled)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
.Padding(0)
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
[
SNew(STextBlock)
.Text(LOCTEXT("LightSelectTitle", "灯光类型:"))
]
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SComboBox >)
.OptionsSource(&Options)
.InitiallySelectedItem(CurrentOptionPtr)
.OnGenerateWidget(this, &FLightBatchUpDataValueEdModeToolkit::HandleGenerateWidget)
.OnSelectionChanged(this, &FLightBatchUpDataValueEdModeToolkit::HandleSelectionChanged)
[
SNew(STextBlock)
.Text(this, &FLightBatchUpDataValueEdModeToolkit::GetSelectedSubjectName)
]
]
]
+ SVerticalBox::Slot()
.VAlign(VAlign_Fill)
.Padding(0.f,20.f)
.AutoHeight()
[
//CreateParametersSet()
SAssignNew(ParameterWidget, SVerticalBox)
]
+ SVerticalBox::Slot()
.HAlign(HAlign_Center)
.AutoHeight()
[
SNew(SButton)
.Text(LOCTEXT("ButtonLabel", "应用"))
.OnClicked(this, &FLightBatchUpDataValueEdModeToolkit::OnButtonClick)
]
];
...
SNew(SSpinBoxfloat>)
.Value(1.f)
.OnValueCommitted_Raw(this,&FLightBatchUpDataValueEdModeToolkit::HandleOnValueCommitted, ID) //我写的就是多传入一个int型的ID,当然你也可以传入其他值
...void HandleOnValueCommitted(float InValue, ETextCommit::Type CommitMethod, int ID);
USelection* SelectedActors = GEditor->GetSelectedActors();
"Modules": [
{
"Name": "LightBatchUpDataValue",
"Type": "Editor",
"LoadingPhase": "Default"
},
{
"Name": "CurveRouteCreate",
"Type": "Runtime",
"LoadingPhase": "Default",
"WhitelistPlatforms": [
"Win64"
]
}
]
PrivateDependencyModuleNames.AddRange(
new string[]
{
...
"CurveRouteCreate"
// ... add private dependencies that you statically link with here ...
}
);
文章标题:UE4灯光批量修改插件(如:把关卡中选中的灯光的光照强度同时乘以1.5倍)(C++篇)
文章链接:http://soscw.com/essay/33850.html