在unity中,我們載入資源一般是通過resources.load(path).即可完成.該方法返回的是object型別.如果你想要的是材質或者貼圖等等,只要**型別轉換的關鍵字就可以了例如 as material,則可以返回乙個材質的引用...
在ue4中,載入資源的方式區別較大.經過自己乙個下午的摸索,目前發現了這4種資源的載入方式.在ue4中,它的藍圖就大致等於untiy中的prefab.所以我們將資源弄成了藍圖的方式來進行載入.
第一種: 如果該藍圖有c++類(或者說是從c++類建立的藍圖),直接進行載入
[cpp]view plain
copy
atemp* spawnactor = getworld()->spawnactor(atemp::staticclass());
所有的載入資源並建立到場景中的方式都離不開spawnactor這一句**.如果你的藍圖包含了c++類,那麼可以直接訪問類的staticclass
剩下的載入方式均是單純的載入藍圖,並沒有對應的c++類
第二種: 通過constructorhelpers來載入
[cpp]view plain
copy
static
constructorhelpers::fclassfinderbpclass(text(
"/game/blueprint/testobj"
));
if(bpclass.class != null)
fclassfinder是乙個結構體,其中的class成員變數是tsubclassof型別的.所以我們只需要spawnactor(bpclass.class)就可以生成我們要的東西了
但是值得一提的是該方法只能在類的建構函式中使用,如果在普通的邏輯**中巢狀這份**,很可能引起整個編譯器的crash.以下是該**的具體執行步驟
[cpp]view plain
copy
struct
fclassfinder
bool
succeeded()
};
不難看出該方法在一開頭的地方就先檢查了是否在建構函式中.checkifisinconstructor,,如果不是的話可能會引起crash(具體原因不明)...然後通過路徑去找到我們要載入的類,並返回給我們.另外一點,該變數必須是static的...
第三種: 通過fstringassetreference來載入
[cpp]view plain
copy
fstringassetreference asset =
"blueprint'/game/blueprint/testobj.testobj'"
; uobject* itemobj = asset.resolveobject();
ublueprint* gen = cast(itemobj);
if(gen != null)
*/
fstringassetreference類的作用主要是通過乙個字串,找到該字串所對應的資源.或者通過給定的資源,找到該資源所對應的在專案中的路徑,也就是前面所說的字串
其中,asset.resolveobject就是查詢字串對應的資源,返回乙個uobejct,我們通過將其轉化成ublueprint型別然後再去的他的generateclass即可.
第四種: 通過staticloadobject來載入
[cpp]view plain
copy
uobject* loadobj = staticloadobject(ublueprint::staticclass(), null, text(
"blueprint'/game/blueprint/testobj.testobj'"
));
if(loadobj != nullptr)
原理的話幾乎是和第三種是一樣的.只是呼叫的方式不同而已.在這裡就不再贅述了.
總結下來,第三種和第四種應該是最通用的.因為第一種要求有對應的藍圖c++類,而第二種又要求一定要是在建構函式中完成(不論是在誰的建構函式都可以,但該方法一定只能在建構函式中呼叫)...
想不到乙個簡單的載入資源也有這麼多種方式...我已經給跪了...天吶...
UE4中資源載入資源的方式
在unity中,我們載入資源一般是通過resources.load path 即可完成.該方法返回的是object型別.如果你想要的是材質或者貼圖等等,只要 型別轉換的關鍵字就可以了例如 as material,則可以返回乙個材質的引用.在ue4中,載入資源的方式區別較大.經過自己乙個下午的摸索,目...
ue4 動態載入資源
動態載入非藍圖資源 如 聲音等使用loadobject 資源型別 nullptr,text 資源路徑引用 載入藍圖資源 獲得藍圖類 loadclass 藍圖的型別 nullptr,text 資源路徑引用 c 這裡需要注意就是資源的路徑需要額外加上 c 例如uclass result1 loadcla...
UE4資源載入,持續更新中
在專案推進中,有很多種獲取資源的需求需要我們處理。例如 因為藍圖類有自己的配置,沒辦法直接用staticclass直接使用藍圖子類。當然,我們可以用staticload等等,這些我就在文章中說一下。真實的關係很複雜,在此一定要區分兩個概念。資源和內容。資源包裹著內容。ue4的各種載入都是在讀取資源。...