【UE·C++】UE4获取当前环境与WorldContextObject

  • 判断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可以获得自身所在的世界信息,就像你知道在世界中所在的地址一样

那么如果我们自定义的UObject类,要获取我们类实例所处的世界信息怎么办,就像代码所示的我们在类中需要实现获取当前运行环境的功能,或者我们要使用获取某个Actor类在世界中的所有actor实例,这时候就需要用到meta中的WorldContext特性了,我们通过WorldContextObject作为中介,把世界信息告诉我们的UObject,这是自定义的通过Actor类获取该Actor在世界中所有实例的函数

	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);
				}
			}
		}
	}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值