1. ERROR:System.ArgumentException: Attempt to construct staged filesystem reference from absolute path
今天打Android包的時候突然出現(xiàn)了這個報錯,也就是前2min的時候打包都還沒有問題,后面突然出現(xiàn)了問題,去看了Log文件,報錯也是只有這個。我采用的辦法是將sdcard中的UE4Game刪掉,然后重啟UE,就可以。
打開命令行,輸入
adb shell
然后會進(jìn)入adb的shell中,在切換到sdcard下面
cd sdcrad
進(jìn)入sdcard文件夾下面后,鍵入ls后,是可以找到UE4Game這個文件夾的,將這個文件夾刪掉就可以
ls

刪掉這個文件夾
rm -r UE4Game
然后重啟你的UE就可以啦
2.如何查看Unreal Engine 的 UMG 中Draw Call數(shù)量
開啟游戲界面后, 在Console Window中輸入stat slate ,此時會彈出一個框框,里面有大量的參數(shù)和屬性,找到Num Batches 屬性,后面對應(yīng)的數(shù)字就是Draw Call的數(shù)量。(一般在Android application中同時4指按下就可以就會彈出來Console Window)

3.在Xcode中編譯UE4或Xcode -> Product -> clean時出現(xiàn) exit with code 5 報錯
有時Xcode編譯UE4經(jīng)常出現(xiàn)exit with code 5,再失敗后執(zhí)行clean操作也會因?yàn)檫@個報錯失敗。
至于報錯原因在log里面有顯示,此時打開Epic Game ,在UE4對應(yīng)的引擎版本中選擇“驗(yàn)證”,等待驗(yàn)證完畢后再重新編譯或者Clean一般就可以成功了

4. 編譯成功,啟動UE4時在UClassCompiledInDefer()方法處崩潰
/**
* Specialized version of the deferred class registration structure.
*/
template <typename TClass>
struct TClassCompiledInDefer : public FFieldCompiledInInfo
{
TClassCompiledInDefer(const TCHAR* InName, SIZE_T InClassSize, uint32 InCrc)
: FFieldCompiledInInfo(InClassSize, InCrc)
{
UClassCompiledInDefer(this, InName, InClassSize, InCrc); // 會在此處崩潰
}
virtual UClass* Register() const override
{
LLM_SCOPE(ELLMTag::UObject);
return TClass::StaticClass();
}
virtual const TCHAR* ClassPackage() const override
{
return TClass::StaticPackage();
}
};
這種情況經(jīng)常出現(xiàn)在我在遠(yuǎn)程倉庫中拉取了新的代碼后重新編譯UE4(此處重新編譯是指編譯Unreal Engine,不是UE中打開的項目),此時點(diǎn)擊Xcode -> Product -> Clean ,進(jìn)行緩存文件的一個清理。清理成功后再次編譯就不會再出現(xiàn)崩潰情況
5. UE 出現(xiàn)exit with code 5 ,Error : Action graph contains cycle!
檢查一下是否出現(xiàn)了兩個模塊在build.cs中出現(xiàn)了相互依賴。因?yàn)樵赨E中是不允許模塊互相依賴的,如果A模塊依賴B模塊,B模塊依賴A模塊則說明A,B模塊設(shè)計是有問題的,兩個模塊中有耦合部分,要將公共部分抽離出來。從原因上來說就是在build.cs中,A依賴了B模塊,則在生成動態(tài)鏈接庫的時候會跳轉(zhuǎn)到B模塊尋找B模塊的信息,而B模塊的build.cs中又依賴了A模塊,則在引入B模塊的信息的時候,又要跳轉(zhuǎn)到A模塊,A模塊又依賴了B模塊,再跳轉(zhuǎn)到B模塊中,就變成了一個死循環(huán)(這和在C++ 中,A.h 中include了B.h,,而在B.h中又include了 A.h的問題是類似的)
6. 在UE中使用C++ 中的extern 關(guān)鍵字和namespace問題
在UE中使用C++的extern 關(guān)鍵字去聲明一個變量是無法使用的,否則會編譯報錯。同樣在namespace中,聲明一個變量,使用namespace::變量名去聲明一個變量也是無法在外部使用的,同樣的編譯報錯 LNK2005:redefined error(vs 報錯結(jié)果)。
UE在文檔中說明不是標(biāo)準(zhǔn)的C++(可能他想表達(dá)這是他魔改過的C++),所以有一些C++ 的語法也是無法在UE中使用的。
7. UE 出現(xiàn)exit with code 5,UBT xxxx dylib/dll 編譯錯誤
出現(xiàn)這個的問題有可能是代碼寫錯了,尤其是一些預(yù)編譯的代碼(比如宏定義之類的,或者是在UE中不支持的C++ 語法用到了UE中)出現(xiàn)了錯誤,導(dǎo)致無法編譯成功,因此也無法生成動態(tài)連接庫。
8.多版本XCode并存使用
由于新版的UE4.24要求使用Xcode 11 及其以上的版本,所以要同時使用Xcode 11和10,所以在兩個版本中進(jìn)行切換,因此也就需要更Xcode打開的改默認(rèn)版本,在命令行中輸入
sudo xcode-select -s ~/Xcode.app/Contents/Developer