1.使用socket方面的功能 需要在.build.cs中添加Networking模塊 但是添加后 使用#include "Networking.h" 還是編譯錯(cuò)誤 最后解決方法是 進(jìn)入ue4 刷新vs工程

- 使用類型為BlueprintNativeEvent 的UFUNCTION 需要在.h頭文件中 同時(shí)添加原始函數(shù)名 和 加_Implementation兩個(gè)聲明 在.cpp中只實(shí)現(xiàn)_Implementation 一個(gè)就可以了

3.簡(jiǎn)單的讀取xml方式
.build.cs中 添加XmlParser模塊 代碼中 #include "XmlParser.h"
include "XmlFile.h"
通過FXmlFile方式進(jìn)行讀取 例如:

4.委托的使用
簡(jiǎn)單說明 就是在A中聲明一個(gè)委托 在B中 對(duì)A中的委托進(jìn)行綁定 然后在A中需要的時(shí)候進(jìn)行委托調(diào)用
方法:在A中聲明委托
在uclass外面 進(jìn)行聲明 其中FConnectDelegate 就是委托的類型名 DECLARE_DELEGATE有多個(gè)版本 分別對(duì)應(yīng)的返回值 帶參數(shù)的委托
DECLARE_DELEGATE_OneParam(FConnectDelegate)
然后在A中 聲明變量 FConnectDelegate OnConnect;

在A中進(jìn)行調(diào)用OnConnect.ExecuteIfBound()
在B中進(jìn)行綁定

5.在UObject中獲得world
我是在寫插件中 在一個(gè)UObject的子類中需要使用SetTimer定時(shí)器 正常通過GetWorld() 返回的空
需要使用GetOuter()->GetWorld()的方式進(jìn)行獲取 同時(shí) 使用NewObject(創(chuàng)建UObject的指針)方式創(chuàng)建時(shí) 需要將actor傳入
6.多線程的簡(jiǎn)單使用
創(chuàng)建一個(gè)新的類 繼承自FRunnable 重寫他的Init Run Exit函數(shù)
使用時(shí) 會(huì)自動(dòng)調(diào)用Init 如果返回true 會(huì)自動(dòng)調(diào)用Run 退出時(shí) 會(huì)自動(dòng)調(diào)用Exit
下面是線程類

下面是調(diào)用方法
FRunnableThread *tempThread = FRunnableThread::Create(new ClientSocket(client), TEXT("RecvThread"));
7.查看變量值 使用VS調(diào)試的時(shí)候 有些變量會(huì)被編譯器優(yōu)化掉 看不到它的數(shù)值 這時(shí)候 將編譯配置改成DebugGameEditor就可以了
另外可以通過vsstudio 調(diào)試/附加到進(jìn)程 來(lái)進(jìn)行調(diào)試
8.c++ 中獲得 umg widget的position
獲得本地position 可以通過widget->CachedGeometry().Position
獲得世界坐標(biāo) 需要通過以下代碼 其中positionInScreen 是ui在實(shí)際窗口中的坐標(biāo)位置
positionInViewPort 是坐標(biāo)在設(shè)計(jì)窗口中的位置
FVector2D positionInScreen;
FVector2D positionInViewPort;
USlateBlueprintLibrary::AbsoluteToViewport(GetWorld(), widget->GetCachedGeometry().AbsolutePosition, positionInScreen, positionInViewPort);