Unreal Engine 4 C++ FString操作的几种方式

本文详细介绍了Unreal Engine 4中FString类的各种操作方法,包括Printf格式化、TArray和TMap格式化以及字符串拼接等技巧,帮助开发者更好地理解和使用UE4中的字符串处理功能。

Unreal Engine 4 C++ FString操作的几种方式

好记性不如烂笔头啊,还是记录一下!


1.Printf 格式化

这个和C、C++的printf用法一样,先来看一看声明

static FString Printf
(
    const TCHAR * Fmt,
    ...
)

官方有详细介绍,用法如下:

int32 i = 1;
FString Text1 = FString::Printf(TEXT("Text%d"), i);

代码运行后会Text1的值为:

"Text1"

2.Format TArray 格式化

此方法用的函数为FString::Format的TArray版本,声明如下:

static FString Format
(
    const TCHAR * InFormatString,
    const TArray < FStringFormatArg > & InOrderedArguments
)

说明下参数的作用:

  • InFormatString 是进行格式化的字符串
  • InOrderedArguments 是会对InFormatString中的{index},根据InOrderedArguments中的索引进行替换

有点难懂,直接看代码和效果会容易理解一些:

int32 i = 1;
TArray<FStringFormatArg> FormatArray;
FormatArray.Add(FStringFormatArg(i));
FString Text1 = FString::Format(TEXT("Text{0}"), FormatArray);

代码运行后会Text1的值为:

"Text1"


TArray版本还可以格式化更多的值,会用数组的第0个元素替换{0},用数组的第1个元素替换{1}。

TArray<FStringFormatArg> FormatArray;
FormatArray.Add(FStringFormatArg(1));
FormatArray.Add(FStringFormatArg(2));
FString Text1 = FString::Format(TEXT("Text{0}{1}{0}"), FormatArray);

代码运行后会Text1的值为:

"Text121"

3.Format TMap 格式化

此方法用的函数为FString::Format的TMap版本,声明如下:

static FString Format
(
    const TCHAR * InFormatString,
    const TMap < FString , FStringFormatArg > & InNamedArguments
)

说明下参数的作用:

  • InFormatString 是进行格式化的字符串
  • InNamedArguments 是会对InFormatString中的{key},根据InNamedArguments中的键值索引替换成InNamedArguments里面的值

有点难懂,直接看代码和效果会容易理解一些:

TMap<FString, FStringFormatArg> FormatMap;
FormatMap.Add(TEXT("key1"), FStringFormatArg(1));
FString Text1 = FString::Format(TEXT("Text{key1}"), FormatMap);

代码运行后会Text1的值为:

"Text1"


TMap版本也还可以格式化更多的值,会用Map的键值为key1的值替换{key1},用键值为key2的值替换{key2}。

TMap<FString, FStringFormatArg> FormatMap;
FormatMap.Add(TEXT("key1"), FStringFormatArg(1));
FormatMap.Add(TEXT("key2"), FStringFormatArg(2));
FString Text1 = FString::Format(TEXT("Text{key1}{key2}{key1}"), FormatMap);

代码运行后会Text1的值为:

"Text121"

4.字符串拼接

Unreal Engine 4 的FString重载了很多操作符,可以很方便的拼接FString:

FString Text1 = TEXT("Text") + FString::FormatAsNumber(1);

代码运行后会Text1的值为:

"Text1"
Unreal Engine中连接到C++编写的服务器,通常涉及到网络通信的实现。Unreal Engine本身提供了网络通信的基础支持,特别是在多人游戏开发中,通常使用的是客户端-服务器模型,并且默认使用UDP协议进行数据传输,因为它提供了低延迟和高吞吐量,非常适合实时游戏[^1]。 以下是一个基本的实现思路和步骤: ### 1. 服务器端实现 首先,确保你的C++服务器已经正确实现并监听在某个端口上。可以使用标准的C++网络库(如Boost.Asio或原生的socket API)来创建TCP或UDP服务器。 ### 2. Unreal Engine客户端连接 在Unreal Engine中,可以通过`FSocket`和`ISocketSubsystem`来实现与服务器的连接。以下是一个使用TCP连接的示例代码: ```cpp #include "Sockets.h" #include "SocketSubsystem.h" // 创建客户端Socket ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM); FSocket* ClientSocket = SocketSubsystem->CreateSocket(NAME_Stream, TEXT("ClientSocket"), false); FIPv4Address ServerAddress; FIPv4Address::Parse(TEXT("127.0.0.1"), ServerAddress); // 替换为服务器IP const TSharedRef<FInternetAddr> ServerAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr(); ServerAddr->SetIp(ServerAddress.Value); ServerAddr->SetPort(8080); // 替换为服务器端口 // 连接到服务器 if (ClientSocket->Connect(*ServerAddr)) { UE_LOG(LogTemp, Log, TEXT("Connected to server")); } else { UE_LOG(LogTemp, Error, TEXT("Failed to connect to server")); } ``` ### 3. 数据发送与接收 一旦连接成功,可以使用`Send`和`Recv`方法进行数据的发送与接收: ```cpp // 发送数据 FString Message = TEXT("Hello Server"); int32 BytesSent = 0; ClientSocket->Send(Message.GetCharArray().GetData(), Message.Len(), BytesSent); // 接收数据 TArray<uint8> ReceivedData; uint32 Size; while (ClientSocket->HasPendingData(Size)) { ReceivedData.SetNumUninitialized(FMath::Min(Size, 65507u)); int32 BytesRead = 0; if (ClientSocket->Recv(ReceivedData.GetData(), ReceivedData.Num(), BytesRead)) { FString ReceivedMessage = FString(ReceivedData.Num(), (const TCHAR*)ReceivedData.GetData()); UE_LOG(LogTemp, Log, TEXT("Received: %s"), *ReceivedMessage); } } ``` ### 4. 多线程处理 为了不阻塞主线程,建议将网络通信放在单独的线程中处理。可以继承`FRunnable`类来实现多线程逻辑[^4]。 ### 5. 调试与测试 Unreal Engine 提供了丰富的调试工具,如可视化调试、性能分析器等。在实现网络通信时,建议使用这些工具进行调试,以确保连接和数据传输的稳定性[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值