一、WorldContextObject(世界上下文對象)
一.了解Actor和UObject的一個(gè)區(qū)別
1.Actor具備掛載組件的能力,它可以通過Scene組件,擁有Transform(坐標(biāo))的概念,它還可以通過Mesh組件,擁有實(shí)體概念,換而言之,Actor具有可見,可被放置的特性,它像是一件物品,能夠被看到,能夠被改變坐標(biāo)信息.
而UObject不能夠掛載組件,不具備坐標(biāo)概念,沒有實(shí)體,因此也不能被放置到世界中.
Actor能夠被放置到Level(關(guān)卡)中,存在于關(guān)卡(世界)中,因此Actor能夠獲得自身所在的世界信息 ,就想你能知道你居住的城市一樣.
二.WorldContextObject作用
如上面所說,UObject無法獲得世界信息(實(shí)例),那么如果我們想在UObject中實(shí)現(xiàn)一個(gè)獲取當(dāng)前世界中某種類型所有實(shí)例的功能(GetAllActorsOfClass)該怎么辦?
這個(gè)時(shí)候我們就需要有個(gè)中介,不能直接獲取世界信息,那么我們嘗試間接獲取,讓能夠直接獲得世界實(shí)例的實(shí)例把世界信息間接告訴UObject,這個(gè)中介就是WorldContextObject.?
三.通過分析GetAllActorsOfClass來了解WorldContextObject
該函數(shù)的使用元說明符:meta=(WorldContext="WorldContextObject")?
四.實(shí)操
新建一個(gè)c++類繼承于BluePrintFunctionLibrary:Cpp_FunctionLibrary
.h文件
.cpp文件
在世界場景中放置三個(gè)BP_ThirdPersonCharacter的小白人,控制權(quán)都是Disable,此時(shí)運(yùn)行后有生成一個(gè)BP_ThirdPersonCharacter;不理解為啥憑空出現(xiàn)小白人,詳見

新建一個(gè)藍(lán)圖類:NewBluePrint(放入場景世界中),調(diào)用TestContextObjectFun函數(shù)


C++斷點(diǎn)

這就是WorldContext的特性,自動(dòng)獲取調(diào)用它的對象,將其賦值給它指定的參數(shù)(meta=(WorldContext="WorldContextObject")),這樣我們就能通過WorldContextObject來間接獲取當(dāng)前的世界了.這就是WorldContext的作用:作為UObject獲取世界實(shí)例的媒介?