UE基础
简述
初次接触UE编程,很多问题都不清楚,做此积累
问题
UE集成GDAL
https://blog.csdn.net/panpan143/article/details/126705294
编译时会有C的文件报错,不让编译,可以选择删掉这部分文件,目前还看到有什么影响
vs 设置
https://zhuanlan.zhihu.com/p/266199524 根据自己理解酌情设置,并不是所有的都需要设置
FString 转 const char*
TCHAR_TO_UTF8
其他类型转FString
c++
//int
FString NewString = FString::FromInt(MyInt);
//float //double ----只能精确到小数点后6位
FString VeryCleanString = FString::SanitizeFloat(MyFloat);
//bool
FString MyFString = MyBool?TEXT("true") :TEXT("false");
//FVector
FString MyFString = MyVector.ToString();
//FVector2D
FString MyFString = MyVector2D.ToString();
//FRotator
FString MyFString = MyRotator.ToString();
//FLinearColor
FString MyFString = MyLinearColor.ToString();
//UObject
FString MyFString = (MyObj != NULL) ? MyObj->GetName() : FString(TEXT("None"));
//FMatrix
FMatrix rotationMatrix(FPlane(0,1,2,3),FPlane(4,5,6,7),FPlane(8,9,10,11),FPlane(12,13,14,15));
FString str = rotationMatrix.ToString();手写归一化
c++
FVector3f targetVector = FVector3f(0.5,0.5,0.5);
float targetLength = sqrt(targetVector.X * targetVector.X + targetVector.Y * targetVector.Y + targetVector.Z * targetVector.Z);
targetLength = 1 / targetLength;
targetVector.X *= targetLength;
targetVector.Y *= targetLength;
targetVector.Z *= targetLength;TMap 获取值问题
js
TMap<FString, FString> kv;
kv = {
{TEXT("A"), TEXT("A")},
}
FString a = kv["A"]; // A
FString b = kv["B"] // 报错,报错原因是空指针问题
FString c = kv.Find("B") //报错,报错原因是返回类型不是FString,类型不一致。const char * 与 ValueType *
FString *d = kv.Find("B") // 不再报错 Empty窗口化时标题设置
在 编辑>项目设置 中搜索 标题,出现两个设置,项目显示标题和项目调试标题信息 前者可以写系统名称,后者写版本号或者其他,如果不写他会显示其他内容,所以最好不要让它为空。
打包后的窗口化和全屏化设置
试过一些方法,最靠谱的是在 Config文件夹下创建DefaultGameUserSetting.ini 文件,如果有直接覆盖相应属性即可
全屏写法:
ini
[/Script/Engine.GameUserSettings]
FullscreenMode=1
Version=5窗口写法:
ini
[/Script/Engine.GameUserSettings]
bUseVSync=False
ResolutionSizeX=1920
ResolutionSizeY=1080
LastUserConfirmedResolutionSizeX=1920
LastUserConfirmedResolutionSizeY=1080
WindowPosX=-1
WindowPosY=-1
FullscreenMode=2
LastConfirmedFullscreenMode=2
Version=5
PreferredFullscreenMode=2设置窗口全屏
c++
// 蓝图写法
// 获取用户游戏设置
GetGameUserSetting // 返回 gameUserSetting对象引用
// 设置全屏模式
SetFullscreenMode // 有三个枚举类型:全屏、窗口全屏、窗口,选择窗口全屏
// 获取桌面分辨率
GetDesktopResolution //gameUserSetting的方法,返回桌面的分辨率
// 设置屏幕分辨率
SetScreenResolution // gameUserSetting的方法,参数为上一步获取的分辨率
// 应用设置
ApplySettings // gameUserSetting的方法,check for command line overrides打勾这么写会生效,但是打包后该配置文件存在哪里还不清楚,打包目录下有同名文件,但是配置内容并不相同
获取机器码
js
FPlatformMisc::GetMachineId().ToString()http请求
- 在.h、
RPipeCreatorUnreal.Build.cs中引入相关模块
c++
// .h
#include "HttpModule.h"
#include "Interfaces/IHttpResponse.h"c++
PublicDependencyModuleNames.AddRange(new string[] { ... "HTTP" });- 声明变量和枚举
c++
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FPromise, const FString&, ResponseString);
// 枚举 get post
UENUM(BlueprintType)
enum class RequestType:uint8
{
GET UMETA(DisplayName = "GET"),
POST UMETA(DisplayName = "POST"),
};- 请求函数
c++
// 开始请求
void APipeMenu::httpRequest(const FString &u, RequestType type, TArray<FString> requestBody)
{
// requset
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
// 设置回调,callback是自己创建的函数
Request->OnProcessRequestComplete().BindUObject(this, &APipeMenu::callback);
// 设置请求头
Request->SetHeader(TEXT("Content-Type"), TEXT("application/json; charset=utf-8"));
// 设置请求地址
Request->SetURL(u);
// post get
Request->SetVerb(type == RequestType::GET ? TEXT("GET") : TEXT("POST"));
// 如果是post需要设置参数
if (type == RequestType::POST)
{
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
// requsetBody 是传进来的参数,为[参数名,参数值,参数名,参数值...]
// 这里因人而异,能把参数写进去就行
for (int i = 0; i < requestBody.Num(); i += 2)
{
JsonObject->SetStringField(requestBody[i], requestBody[i + 1]);
}
// Convert the JSON object to a string
FString RequestBody;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&RequestBody);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
// 设置请求体
Request->SetContentAsString(RequestBody);
}
// 发出请求
Request->ProcessRequest();
}
// 请求回到
void APipeMenu::callback(FHttpRequestPtr request, FHttpResponsePtr response, bool bSuccess)
{
// 是否请求成功
if (bSuccess && response.IsValid())
{
// 成功后将返回内容作为字符串存入promise,类似与js中成功回调
FString content = response->GetContentAsString();
promise.Broadcast(content);
}
}打开文件(夹)
js
// 文件
TArray<FString> OutFiles;
TArray<FString> path; // 选中文件路径
FString fileType = TEXT("Shape (*.shp)|*.shp"); // 过滤文件类型
FString defaultPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()); // 文件选择窗口默认开启路径
IDesktopPlatform *DesktopPlatform = FDesktopPlatformModule::Get();
// 找到父窗体,如果不设置,那么在选择文件后会失去焦点
DesktopPlatform->OpenFileDialog(FSlateApplication::Get().FindBestParentWindowHandleForDialogs(nullptr), TEXT("shp导入"), defaultPath, TEXT(""), *fileType, EFileDialogFlags::None, path);
FString uri;
if (path.Num() > 0)
{
uri = path[0];
}
return uri;js
// 文件夹
TArray<FString> OutFiles;
// TArray<FString> path; // 选中文件路径
FString path;
FString fileType = TEXT("Shape (*.shp)|*.shp"); // 过滤文件类型
FString defaultPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()); // 文件选择窗口默认开启路径
// IDesktopPlatform *DesktopPlatform = FDesktopPlatformModule::Get();
FDesktopPlatformModule::Get()->OpenDirectoryDialog(FSlateApplication::Get().FindBestParentWindowHandleForDialogs(nullptr), TEXT("3dTile导出"), defaultPath, path);