UE_新建插件
说明摘要:
一般上的UE新建插件步骤为:Edit -> Plugins -> NewPlugin。然后,在NewPlugin的tab页提供了模板选择:
- Blank [ 用少量代码创建一个空插件。如果你想从草稿设置一些东西或是做一个不可视插件的话选它。用这个模板创建的插件会在编辑插件显示但是不会注册到任何按钮或菜单入口 ]
- Content Only [ 创建一个仅包含内容的空插件 ]
- Blueprint Library [ 创建一个包含蓝图函数库的插件。如果你想创建静态蓝图节点选择它 ]
- Editor Toolbar Button [ 创建一个插件将会在关卡编辑器的工具条添加一个按钮。通过创建OnClickButton事件执行事件开始 ]
- Editor Standalone Window [ 创建一个插件将会在关卡编辑器的工具条添加一个按钮,点击时调出一个空的独立标签页 ]
- Editor Mode [ 创建一个插件,会有一个编辑模式。这个包含一个工具包示例指定UI,会显示在Modes标签页下(接近Foliage,Landscape等)]
- Third Pary Library [ 创建一个插件,包含三方库。这个可以作为一个示例怎样包含、加载和使用你自己的第三方库 ]
测试:
Blueprint Library测试:
Editor Mode测试:
void FEditorModeTestEdModeToolkit::Init(const TSharedPtr<IToolkitHost>& InitToolkitHost)
{
struct Locals
{
static bool IsWidgetEnabled()
{
return GEditor->GetSelectedActors()->Num() != 0;
}
static FReply OnButtonClick(FVector InOffset)
{
USelection* SelectedActors = GEditor->GetSelectedActors();
// Let editor know that we're about to do something that we want to undo/redo
GEditor->BeginTransaction(LOCTEXT("MoveActorsTransactionName", "MoveActors"));
// For each selected actor
for (FSelectionIterator Iter(*SelectedActors); Iter; ++Iter)
{
if (AActor* LevelActor = Cast<AActor>(*Iter))
{
// Register actor in opened transaction (undo/redo)
LevelActor->Modify();
// Move actor to given location
LevelActor->TeleportTo(LevelActor->GetActorLocation() + InOffset, FRotator(0, 0, 0));
}
}
// We're done moving actors so close transaction
GEditor->EndTransaction();
return FReply::Handled();
}
static TSharedRef<SWidget> MakeButton(FText InLabel, const FVector InOffset)
{
return SNew(SButton)
.Text(InLabel)
.OnClicked_Static(&Locals::OnButtonClick, InOffset);
}
};
const float Factor = 256.0f;
SAssignNew(ToolkitWidget, SBorder)
.HAlign(HAlign_Center)
.Padding(25*2)
.IsEnabled_Static(&Locals::IsWidgetEnabled)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Center)
.Padding(50)
[
SNew(STextBlock)
.AutoWrapText(true)
.Text(LOCTEXT("HelperLabel", "Select some actors and move them around using buttons below。。。。"))
]
+ SVerticalBox::Slot()
.HAlign(HAlign_Center)
.AutoHeight()
[
Locals::MakeButton(LOCTEXT("UpButtonLabel", "Up"), FVector(0, 0, Factor*2))
]
+ SVerticalBox::Slot()
.HAlign(HAlign_Center)
.AutoHeight()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
[
Locals::MakeButton(LOCTEXT("LeftButtonLabel", "Left"), FVector(0, -Factor, 0))
]
+ SHorizontalBox::Slot()
.AutoWidth()
[
Locals::MakeButton(LOCTEXT("RightButtonLabel", "Right"), FVector(0, Factor, 0))
]
]
+ SVerticalBox::Slot()
.HAlign(HAlign_Center)
.AutoHeight()
[
Locals::MakeButton(LOCTEXT("DownButtonLabel", "Down"), FVector(0, 0, -Factor))
]
];
FModeToolkit::Init(InitToolkitHost);
}