一、WorldContextObject(世界上下文对象)
一.了解Actor和UObject的一个区别
1.Actor具备挂载组件的能力,它可以通过Scene组件,拥有Transform(坐标)的概念,它还可以通过Mesh组件,拥有实体概念,换而言之,Actor具有可见,可被放置的特性,它像是一件物品,能够被看到,能够被改变坐标信息.
而UObject不能够挂载组件,不具备坐标概念,没有实体,因此也不能被放置到世界中.
Actor能够被放置到Level(关卡)中,存在于关卡(世界)中,因此Actor能够获得自身所在的世界信息 ,就想你能知道你居住的城市一样.
二.WorldContextObject作用
如上面所说,UObject无法获得世界信息(实例),那么如果我们想在UObject中实现一个获取当前世界中某种类型所有实例的功能(GetAllActorsOfClass)该怎么办?
这个时候我们就需要有个中介,不能直接获取世界信息,那么我们尝试间接获取,让能够直接获得世界实例的实例把世界信息间接告诉UObject,这个中介就是WorldContextObject.
三.通过分析GetAllActorsOfClass来了解WorldContextObject
该函数的使用元说明符:meta=(WorldContext="WorldContextObject")
四.实操
新建一个c++类继承于BluePrintFunctionLibrary:Cpp_FunctionLibrary
.h文件
.cpp文件
在世界场景中放置三个BP_ThirdPersonCharacter的小白人,控制权都是Disable,此时运行后有生成一个BP_ThirdPersonCharacter;不理解为啥凭空出现小白人,详见

新建一个蓝图类:NewBluePrint(放入场景世界中),调用TestContextObjectFun函数


C++断点

这就是WorldContext的特性,自动获取调用它的对象,将其赋值给它指定的参数(meta=(WorldContext="WorldContextObject")),这样我们就能通过WorldContextObject来间接获取当前的世界了.这就是WorldContext的作用:作为UObject获取世界实例的媒介