3.3 KiB
3.3 KiB
KismetHideOverrides
- 功能描述: 不允许被覆盖的蓝图事件的列表。
- 使用位置: UCLASS
- 引擎模块: Blueprint
- 元数据类型: strings="a,b,c"
在源码中发现ALevelScriptActor上面定义了很多,用来阻止被覆盖。
样例:
UCLASS(notplaceable, meta=(ChildCanTick, KismetHideOverrides = "ReceiveAnyDamage,ReceivePointDamage,ReceiveRadialDamage,ReceiveActorBeginOverlap,ReceiveActorEndOverlap,ReceiveHit,ReceiveDestroyed,ReceiveActorBeginCursorOver,ReceiveActorEndCursorOver,ReceiveActorOnClicked,ReceiveActorOnReleased,ReceiveActorOnInputTouchBegin,ReceiveActorOnInputTouchEnd,ReceiveActorOnInputTouchEnter,ReceiveActorOnInputTouchLeave"), HideCategories=(Collision,Rendering,Transformation), MinimalAPI)
class ALevelScriptActor : public AActor
{}
但是实际在LevelScriptActor的子类中依然可以覆盖该事件。有一些被隐藏的Event是其实通过HideCategories来做到的。因此该Meta其实并没有实现,如果要达到该效果,还是要通过HideFunctions或HideCategories来达成。
原理:
可以看到这里面的判断,并没有用到该Meta
void SMyBlueprint::CollectAllActions(FGraphActionListBuilderBase& OutAllActions)
{
// Cache potentially overridable functions
UClass* ParentClass = BlueprintObj->SkeletonGeneratedClass ? BlueprintObj->SkeletonGeneratedClass->GetSuperClass() : *BlueprintObj->ParentClass;
for ( TFieldIterator<UFunction> FunctionIt(ParentClass, EFieldIteratorFlags::IncludeSuper); FunctionIt; ++FunctionIt )
{
const UFunction* Function = *FunctionIt;
const FName FunctionName = Function->GetFName();
UClass *OuterClass = CastChecked<UClass>(Function->GetOuter());
// ignore skeleton classes and convert them into their "authoritative" types so they
// can be found in the graph
if(UBlueprintGeneratedClass *GeneratedOuterClass = Cast<UBlueprintGeneratedClass>(OuterClass))
{
OuterClass = GeneratedOuterClass->GetAuthoritativeClass();
}
if ( UEdGraphSchema_K2::CanKismetOverrideFunction(Function)
&& !OverridableFunctionNames.Contains(FunctionName)
&& !ImplementedFunctionCache.Contains(FunctionName)
&& !FObjectEditorUtils::IsFunctionHiddenFromClass(Function, ParentClass)
&& !FBlueprintEditorUtils::FindOverrideForFunction(BlueprintObj, OuterClass, Function->GetFName())
&& Blueprint->AllowFunctionOverride(Function)
)
{
FText FunctionTooltip = FText::FromString(UK2Node_CallFunction::GetDefaultTooltipForFunction(Function));
FText FunctionDesc = K2Schema->GetFriendlySignatureName(Function);
if ( FunctionDesc.IsEmpty() )
{
FunctionDesc = FText::FromString(Function->GetName());
}
if (Function->HasMetaData(FBlueprintMetadata::MD_DeprecatedFunction))
{
FunctionDesc = FBlueprintEditorUtils::GetDeprecatedMemberMenuItemName(FunctionDesc);
}
FText FunctionCategory = FObjectEditorUtils::GetCategoryText(Function);
TSharedPtr<FEdGraphSchemaAction_K2Graph> NewFuncAction = MakeShareable(new FEdGraphSchemaAction_K2Graph(EEdGraphSchemaAction_K2Graph::Function, FunctionCategory, FunctionDesc, FunctionTooltip, 1, NodeSectionID::FUNCTION_OVERRIDABLE));
NewFuncAction->FuncName = FunctionName;
OverridableFunctionActions.Add(NewFuncAction);
OverridableFunctionNames.Add(FunctionName);
}
}
}