【UE·Editor篇】UE编辑器开发的常见编译失败原因总结
最近在學各種編輯器開發的教程,但是作為一個萌新學起來并不順利。絕大多數教程都是默認讀者已經是一個有經驗的開發者。我在學這些編輯器擴展相關的教程里,遇到最主要的問題就是各種各樣的編譯失敗。這篇文章就是記錄我對這些個編譯失敗問題的匯總,避免新人和我踩同樣的坑。
1.Unable to start program ‘xxx\UE4.exe’.
原因: 這個錯誤的原因是我們沒有把當前工程項目設置為啟動項目。因為我們通常把UE4源碼下載到本地一起編譯。在復制工程的時候有可能UE4工程變成了啟動項,這時點擊運行就會出現這個"Unable to start program"的錯誤。
2. Failed to generate project files 和 xxx(工程名)could not be complied.
先說一下怎么在vs工程里增加新的文件,如果在vs里面新建,會出現一個問題,就是當我們右鍵uproject文件選中重新生成vs項目時會出現新建的代碼文件全部消失的問題,因為vs會把新建的文件放在一個臨時的文件夾,而當我們重新生成工程時這些臨時文件就會被干掉。所以我的做法是直接在文件瀏覽器下右鍵生成txt文件再改成代碼文件。
當我們增加新的文件時,右鍵uproject文件選中Generate vs project files時可能會提示Failed to generate project files。此時我們雙擊uproject想打開工程也會發現工程could not be compiled。
原因: 這個問題的原因是我們Editor模塊名稱不對。Editor模塊名稱必須等于工程名加上Editor后綴。 比如我的工程名稱叫"LearnBP",Editor模塊名稱必須是"LearnBPEditor"。
3. unresolved external symbol IMPLEMENT MODULE
原因: 這個問題的原因是我們自定義的繼承自IModuleInterface的模塊類沒有加上IMPLEMENT_MODULE這個宏。查看IMPLEMENT_MODULE源碼,可以看到它的作用是模塊類的初始化,同時導出dll給其他地方調用。在UE4的架構里,即使你這個模塊類什么都不做,也依然需要有一個空的模塊類并且加上這個宏。
4. error LNK2019: unresolved external symbol "__declspec(dllimport)
這個錯誤出現時通常不會只出現一個而是一大串類似錯誤一起出現。
原因:沒有在.Build.cs加載對應的模塊。 在UE4里即使沒有加載對應模塊vs編譯器不會提示你代碼有問題。這個時候如果編譯就會出現這種一大片編譯錯誤。這個時候就需要檢查.Build.cs有沒有漏寫的模塊。比如我圖上這種情況就是在.Builds.cs里的PrivateDependencyModuleNames變量里沒有添加“Slate”和“Slate Core”模塊。
這里可能又有同學要問了,為什么加在PrivateDependencyModuleNames而不是PublicDependencyModuleNames呢?這個原因是我這個例子里的Slate和SlateCore模塊并不需要暴露給另外的模塊來使用。
再舉個例子1:
- A模塊 privateDependency 添加 Slate模塊
- B模塊 privateDependency或者pubilcDependency 添加 A模塊
- 這個時候B模塊只可以使用A模塊,不可以使用Slate模塊。
再再舉個例子2:
- A模塊 pubilcDependency 添加 Slate模塊
- B模塊 privateDependency或者pubilcDependency 添加 A模塊
- 這個時候B模塊不僅可以使用A模塊,還可以使用Slate模塊。
如果還要區分定義在頭文件的函數和定義在cpp文件的函數,則情況更加復雜。詳情見這篇文章:UE4 模塊,PrivateDependencyModuleNames?
5. Super’: is not a class or namespace name
原因:錯誤使用Super,Super只有UObject子類才能使用。 我們平常在寫UE4代碼時習慣了使用Super來表示父類。但其實Super并不是C++本身的東西,是UE4底層自己寫的。我們找到UObject的源碼(Engine\Source\Runtime\CoreUObject\Public\UObject\Object.h),可以看到這個DECLARE_CLASS 宏,里面定義了Super這個內部變量。
在做編輯器擴展時,大量的類都不是繼承自UObject的,在這種時候是不能使用Super來表示父類。 正確的寫法是類名::方法名。比如:
關于作者
- 水曜日雞,喜歡ACG的游戲程序員。曾參與索尼中國之星項目《硬核機甲》的開發。 目前在某大廠做UE4項目。
CSDN博客:https://blog.csdn.net/j756915370
知乎專欄:https://zhuanlan.zhihu.com/c_1241442143220363264
游戲同行聊天群:891809847
總結
以上是生活随笔為你收集整理的【UE·Editor篇】UE编辑器开发的常见编译失败原因总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Python(sklearn)计算P
- 下一篇: BUGKU easypicture