辣鸡引擎毁我青春!薅我头发!

------------------------------------------------------割------------------------------------------------------------------------

Q.UWebBrowser不支持中文输入法的bug:

继承 UWebBrowser,重写Rebuild函数:

TSharedRef<SWidget> UWebBrowserEx::RebuildWidget()
    if (IsDesignTime())
        return SNew(SBox)
            .HAlign(HAlign_Center)
            .VAlign(VAlign_Center)
                SNew(STextBlock)
                .Text(LOCTEXT("Web BrowserEx", "Web BrowserEx"))
        WebBrowserWidget = SNew(SWebBrowser)
            .InitialURL(InitialURL)
            .ShowControls(false)
            .SupportsTransparency(bSupportsTransparency)
            .OnUrlChanged(BIND_UOBJECT_DELEGATE(FOnTextChanged, HandleOnUrlChanged))
            .OnBeforePopup(BIND_UOBJECT_DELEGATE(FOnBeforePopupDelegate, HandleOnBeforePopup));
        
     //支持中文输入法 start
if (WebBrowserWidget.IsValid()) ITextInputMethodSystem* const TextInputMethodSys = FSlateApplication::Get().GetTextInputMethodSystem(); WebBrowserWidget->BindInputMethodSystem(TextInputMethodSys);
     //支持中文输入法 end
return WebBrowserWidget.ToSharedRef(); } }

Error: ERROR: A conflicting instance of AutomationTool is already running. Curent location: D:\Ue4\UE_4.21\Engine\Binaries\DotNET\AutomationTool.exe. A process manager may be used to determine the conflicting process and what tool may have launched it

  打包时,经常遇到╮(╯▽╰)╭,打开任务结束AutomationTool.exe进程就好(重启也行,手动滑稽)

 4.21:Cast转换时报错:error C2664: “To *TCastImpl<From,To,ECastType::UObjectToInterface>::DoCast(UObject *)”: 无法将参数 1 从“From *”转换为“UObject *”

  这沙雕问题,报错报的不明就里.

  以以下Cast 代码为例.

AGameModeBase* temp_gamemode = UGameplayStatics::GetGameMode(this);
IDemonstrateGameMode* gameModeIns = Cast<IDemonstrateGameMode>(temp_gamemode);

  如果temp_gamemode指针为“指向不完整类型指针”时就会报error C2664.  

  实际问题就是少了在

  .cpp或.h中   #include "GameFramework/GameMode.h"

 4.21:打包时遇到fatal error C1083: 无法打开包括文件"XXXXX.h" No such file or directory

可以Debug启动,打包时就失败了

主要问题:

这沙雕问题,要不是看在我贫穷的份上,我就一jio踢爆公司的RTX Titan机箱了!

1.重复引用

2.#include 路径问题

3.ANSI和UTF-8编码问题

4.插件依赖Module问题

解决方法:

#include 路径问题:

用类似以下栗子的,新的#include路径:

#include "BJ_3DDesignAPP/DemonStrate/Data/DTOData_SceneConfig.h"

代替旧的#include路径:

#include "DemonStrate/Data/DTOData_SceneConfig.h"

note: BJ_3DDesignAPP是我Source的Root目录

插件依赖Module问题:

  例如以我经常会用到的Plugin插件VictoryPlugin为例,里面的VictoryBPFunctionLibrary.h 里引用了AIModule里面的东西(Plugin插件的build.cs里已经Private依赖的AIModule)

  然后我在工程中build.cs private依赖了VictoryPlugin插件 并 #include "VictoryBPFunctionLibrary.h” ,打包时可能回报C1083 Error.

  那么可有可能是你忘记在主工程中依赖相关Module,例如忘记依赖AIModule 模块,他就回报 C1083 "AIController.h" No such file or directory

4.21:LogCompile: Error: Cannot expose property to blueprints in a struct that is not a BlueprintType. CppAnimNode_Demonstrate.BasePose

  在做自定义Anim Graph Node遇到的报错.

  把结构体宏USTRUCT() 改成 USTRUCT(BlueprintType)即可

4.15 升至4.16

吐槽:4.15到4.16更新 引擎底层变动真尼玛大。很多报错的方式和写法跟以前完全不一样了~~!

1. Cpp文件报 Expected CppCom_Menu.h to be first header included.

原因:UE4 更改了Build.cs的写法。注解掉 PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs即可

4.18.3 :WebBrowser Plugin绑定UObject时 报错

最近想给WebBrowser 插件 BingUObject 一个C++的UObject 跟HTML页面做些交互。

在写好了代码

void UMainUserWidget::BindJSObject()
    this->JSLink = NewObject<UJSBus>(UJSBus::StaticClass());
    this->JSLink->CS = TEXT("ccc");
    this->JSLink->TestStr = TEXT("TestStr");
    FString Name = TEXT("UE_Demo");
    if (JSLink != nullptr) 
        auto wgt_ptr = MainWeb->GetWebWidget();
        wgt_ptr->BindUObject(Name, JSLink);

Compile时 报出一下不明真相的错误:

MainUserWidget.cpp.obj : error LNK2019: 

{路径}\UE4Editor-{项目名称}.dll : fatal error LNK1120: 1

Error executing C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\link.exe (tool returned code: 1120)

最后看了看WebBrowser插件的Build.cs发现是缺少了一些Module.然后自己项目的Build.cs

 附JS 交互代码:

 window.ue.myobject.{函数}({参数}).then( function(TheReturnedValue) { console.log(TheReturnedValue); alert(TheReturnedValue)} ).catch( function(error){ console.log(error);alert(error) } );

添加上,编译就通过了。(其他插件类似错误同理)可喜可贺可喜可贺。

4.20.X :错误 C2511 void AMyProjectCharacter::XXX(const FString &)”:“XXX”中没有找到重载的成员函数 XX.gen.cpp 

这报错通常出现于BlueprintImplementableEvent和BlueprintNativeEvent修饰符的UFUnction情况下。

现在版本的BlueprintImplementableEvent和BlueprintNativeEvent修饰符的UFUnction函数FString 的必须是以下格式:

    UFUNCTION(BlueprintImplementableEvent, Category = "Cpp_Event")
        void Event_A(FString &str);
    UFUNCTION(BlueprintNativeEvent, Category = "Cpp_Event")
        void Event_B(FString &str);
        void Event_B_Implementation(FString &str);

4.21.X:ERROR: Non-editor build cannot depend on non-redistributable modules.

本文原创,不定时更新 可以随意转载到任何网站 ~但是~ 转载也要按“基本法” 请注明原文出处和作者