UE4 - 奇奇怪怪的報錯

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
鍵入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)


輸入stat slate指令后

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一般就可以成功了

Epic Game 客戶端

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容