虚幻4基础:UE4中的Name和Text

本文介绍了虚幻4(UE4)中的Name和Text的区别。Name基于索引,查找速度快,不区分大小写,可以使用Utility->Name的Make Literal Name功能。Text则用于储存描述性语言,区分大小写,从Name转为Text可能会失真。在UE4中,Text可以通过String Table进行管理,支持多语言和变量扩展,如在Format中用{}包裹的变量会在输出时被替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Name

储存方式:基于索引。查找速度最快。
不区分大小写。
Utility->Name:
Make Literal Name:
在这里插入图片描述
在value中输入,在return value引脚就可以得到。

Text

便于储存描述性语言。区分大小写,因此如果从Name转成Text,会失真。下列是一些常见的Text功能。

在这里插入图片描述
如果要在屏幕上输出,需要用Return Value连Print Sring,头部得有一个Begin Play。
在这里插入图片描述
鼠标右键—>Miscellaneous->String Table。在这里,假如把它命名为NewStringTable,可以在右侧的Default Value中的下三角小箭头点击,有Inline Text。在Reference Text中,String Table可以选择哪个String Table,这里就能选到NewString Table,有key和source string,类似于unordered_map。一个key对应一个value。

以下是使用虚幻引擎API进行组播的详细案例: 1. 首先,您需要创建一个新的虚幻引擎项目,并打开C++代码编辑器。 2. 在您的项目中创建一个新的Actor类,例如MyUDPActor。 3. 在MyUDPActor.h文件中,添加以下代码: ```cpp #include "MyUDPActor.generated.h" UCLASS() class MYPROJECT_API AMyUDPActor : public AActor { GENERATED_BODY() public: AMyUDPActor(); virtual void BeginPlay() override; void StartUDPReceiver(const FString& YourChosenSocketName, const FString& TheIP, const int32 ThePort); bool StartUDPReceiver(const FString& YourChosenSocketName, const FString& TheIP, const int32 ThePort); void StopUDPReceiver(const FString& YourChosenSocketName); bool StopUDPReceiver(const FString& YourChosenSocketName); bool UDPSocketSender(FString YourMessage, const FString& TheIP, const int32 ThePort); FSockAddr RemoteAddr; FUdpSocketReceiver* UDPReceiver = nullptr; }; ``` 4. 在MyUDPActor.cpp文件中,添加以下代码: ```cpp #include "MyUDPActor.h" #include "Networking/Public/Networking.h" AMyUDPActor::AMyUDPActor() { } void AMyUDPActor::BeginPlay() { Super::BeginPlay(); FString IP = TEXT("127.0.0.1"); int32 Port = 10001; FString SocketName = TEXT("MySocket"); StartUDPReceiver(SocketName, IP, Port); } bool AMyUDPActor::StartUDPReceiver(const FString& YourChosenSocketName, const FString& TheIP, const int32 ThePort) { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, TEXT("UDP Receiver started!")); UDPReceiver = new FUdpSocketReceiver(); FIPv4Endpoint Endpoint(FIPv4Address(0, 0, 0, 0), ThePort); TSharedRef<FInternetAddr> Addr = Endpoint.ToInternetAddr(); Addr->SetIp(*TheIP, true); int32 BufferSize = 2 * 1024 * 1024; // 2MB buffer size UDPReceiver->Init(BufferSize); UDPReceiver->Start(); UDPReceiver->OnDataReceived().BindUObject(this, &AMyUDPActor::UDPSocketListener); return true; } void AMyUDPActor::UDPSocketListener(const FArrayReaderPtr& ArrayReaderPtr, const FIPv4Endpoint& EndPt) { FString ReceivedData = FString(UTF8_TO_TCHAR((const char*)ArrayReaderPtr->GetData())); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, ReceivedData); } void AMyUDPActor::StopUDPReceiver(const FString& YourChosenSocketName) { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, TEXT("UDP Receiver stopped!")); if (UDPReceiver) { UDPReceiver->Stop(); delete UDPReceiver; UDPReceiver = nullptr; } } bool AMyUDPActor::UDPSocketSender(FString YourMessage, const FString& TheIP, const int32 ThePort) { TSharedRef<FInternetAddr> Destination = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr(); bool bIsValid; Destination->SetIp(*TheIP, bIsValid); Destination->SetPort(ThePort); if (!bIsValid) { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("UDP Send: Invalid IP address %s"), *TheIP)); return false; } int32 BytesSent = 0; FString Message = YourMessage + TEXT("\n"); TArray<uint8> Data = TArray<uint8>((const uint8*)TCHAR_TO_UTF8(*Message), Message.Len()); FSocket* SenderSocket = FUdpSocketBuilder(*YourChosenSocketName).AsReusable().WithBroadcast(); bool bDidSend = SenderSocket->SendTo(Data.GetData(), Data.Num(), BytesSent, *Destination); if (bDidSend) { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("UDP Send: Sent %d bytes to %s:%d"), BytesSent, *TheIP, ThePort)); } else { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("UDP Send: Unable to send packet to %s:%d"), *TheIP, ThePort)); } SenderSocket->Close(); delete SenderSocket; return bDidSend; } ``` 5. 现在,您可以在其他Actor类中使用MyUDPActor的实例来发送接收UDP数据包。例如: ```cpp AMyUDPActor* MyUDPActor = GetWorld()->SpawnActor<AMyUDPActor>(); MyUDPActor->UDPSocketSender(TEXT("Hello World!"), TEXT("127.0.0.1"), 10001); ``` 这将向IP地址为127.0.0.1,端口号为10001的地址发送“Hello World!”消息,并在MyUDPActor的屏幕上显示该消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值