日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【UE·Editor篇】UE编辑器开发的常见编译失败原因总结

發布時間:2024/3/24 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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來表示父類。 正確的寫法是類名::方法名。比如:

void FExampleDataEditorToolkit::RegisterTabSpawners(const TSharedRef<FTabManager>& InTabManager) {FAssetEditorToolkit::RegisterTabSpawners(InTabManager); }

關于作者

  • 水曜日雞,喜歡ACG的游戲程序員。曾參與索尼中國之星項目《硬核機甲》的開發。 目前在某大廠做UE4項目。

CSDN博客:https://blog.csdn.net/j756915370
知乎專欄:https://zhuanlan.zhihu.com/c_1241442143220363264
游戲同行聊天群:891809847

總結

以上是生活随笔為你收集整理的【UE·Editor篇】UE编辑器开发的常见编译失败原因总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。