- 判断PC端当前是否是在PIE(Play In Editor)下运行
//如果在外部调用可以加上UFUNCTION
UFUNCTION(BlueprintCallable,BlueprintPure, meta=(WorldContext="WorldContextObject"))
bool UMyHttpRequest::RunPIE(UObject* WorldContextObject)
{
return WorldContextObject->GetWorld()->WorldType == EWorldType::PIE;
}
通过以上内容我们看到我们要获取当前系统的运行环境,需要需要使用世界上下文(WolrdContext)获取World实例,然后通过World实例获取WorldType,UMyHttpRequest是我自定义的类,继承自UObject,而UObject众所周知是不能挂载组件的,也没有坐标的概念,没有实体当然就不能放置在场景中,而Actor虽然也是继承自UObject,但是它具备挂在组件能力,有坐标Transform的概念(通过SceneComponent),有实体概念(通过MeshComponent),可以被放置到场景中,既然Actor可以被放置在Level中,处于世界中,所以Actor可以获得自身所在的世界信息,就像你知道在世界中所在的地址一样文章来源:https://www.toymoban.com/news/detail-543059.html
那么如果我们自定义的UObject类,要获取我们类实例所处的世界信息怎么办,就像代码所示的我们在类中需要实现获取当前运行环境的功能,或者我们要使用获取某个Actor类在世界中的所有actor实例,这时候就需要用到meta中的WorldContext特性了,我们通过WorldContextObject作为中介,把世界信息告诉我们的UObject,这是自定义的通过Actor类获取该Actor在世界中所有实例的函数文章来源地址https://www.toymoban.com/news/detail-543059.html
UFUNCTION(BlueprintCallable,Category="CustomDefine",meta=(WorldContext="WorldContextObject))
static void MyGetActorByClass(UObject * WorldContextObject,TSubClassOf<AActor> ActorClass);
TArray<AActor*> UMyObject::MyGetActorByClass(UObject * WorldContextObject,TSubClassOf<AActor> ActorClass)
{
TARRAY<AActor*> OutActors;
if(ActorClass)
{
if(UWorld * World = GEngine->GetWroldFromContextObject(WorldContextObject,EGetWorldErrorMode::LogAndReturnNull))
{
for(TActorIterator<AActor> it(World,ActorClass);it;++it)
{
AActor * Actor = *it;
OutActors.Add(Actor);
}
}
}
}
到了这里,关于【UE·C++】UE4获取当前环境与WorldContextObject的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!