UE4 c++编程遇到的问题

1.使用socket方面的功能 需要在.build.cs中添加Networking模块 但是添加后 使用#include "Networking.h" 还是编译错误 最后解决方法是 进入ue4 刷新vs工程


UE4 c++编程遇到的问题_第1张图片
image.png
  1. 使用类型为BlueprintNativeEvent 的UFUNCTION 需要在.h头文件中 同时添加原始函数名 和 加_Implementation两个声明 在.cpp中只实现_Implementation 一个就可以了
image.png

3.简单的读取xml方式
.build.cs中 添加XmlParser模块 代码中 #include "XmlParser.h"

include "XmlFile.h"

通过FXmlFile方式进行读取 例如:


UE4 c++编程遇到的问题_第2张图片
image.png

4.委托的使用
简单说明 就是在A中声明一个委托 在B中 对A中的委托进行绑定 然后在A中需要的时候进行委托调用
方法:在A中声明委托
在uclass外面 进行声明 其中FConnectDelegate 就是委托的类型名 DECLARE_DELEGATE有多个版本 分别对应的返回值 带参数的委托
DECLARE_DELEGATE_OneParam(FConnectDelegate)
然后在A中 声明变量 FConnectDelegate OnConnect;


UE4 c++编程遇到的问题_第3张图片
image.png

在A中进行调用OnConnect.ExecuteIfBound()

在B中进行绑定


image.png

5.在UObject中获得world
我是在写插件中 在一个UObject的子类中需要使用SetTimer定时器 正常通过GetWorld() 返回的空
需要使用GetOuter()->GetWorld()的方式进行获取 同时 使用NewObject(创建UObject的指针)方式创建时 需要将actor传入

6.多线程的简单使用
创建一个新的类 继承自FRunnable 重写他的Init Run Exit函数
使用时 会自动调用Init 如果返回true 会自动调用Run 退出时 会自动调用Exit
下面是线程类


UE4 c++编程遇到的问题_第4张图片
image.png

下面是调用方法
FRunnableThread *tempThread = FRunnableThread::Create(new ClientSocket(client), TEXT("RecvThread"));

7.查看变量值 使用VS调试的时候 有些变量会被编译器优化掉 看不到它的数值 这时候 将编译配置改成DebugGameEditor就可以了
另外可以通过vsstudio 调试/附加到进程 来进行调试

8.c++ 中获得 umg widget的position
获得本地position 可以通过widget->CachedGeometry().Position
获得世界坐标 需要通过以下代码 其中positionInScreen 是ui在实际窗口中的坐标位置
positionInViewPort 是坐标在设计窗口中的位置
FVector2D positionInScreen;
FVector2D positionInViewPort;
USlateBlueprintLibrary::AbsoluteToViewport(GetWorld(), widget->GetCachedGeometry().AbsolutePosition, positionInScreen, positionInViewPort);

你可能感兴趣的:(UE4 c++编程遇到的问题)