UE GEngine->AddOnScreenDebugMessage 的使用

UE GEngine->AddOnScreenDebugMessage 的使用

在 Unreal Engine 中,GEngine->AddOnScreenDebugMessage 是一个常用的调试工具,它允许开发者在游戏的屏幕上直接显示调试消息。这在开发和测试过程中非常有用,尤其是当你想快速检查变量的值或确认代码路径被执行时。

基本用法

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("This is a debug message!"));

例子:在beginplay中加入该方法

void ALogTestActor::BeginPlay()
{
	Super::BeginPlay();
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("This is a debug message!"));
}

显示效果:
在这里插入图片描述

在上面的代码中:

  • 第一个参数 -1 表示这个消息的键。使用 -1 会使消息显示在屏幕上,但不会替换任何现有消息。如果你使用特定的键(例如 1),那么使用该键的任何后续消息都会替换先前的消息。
  • 第二个参数 5.f 是消息在屏幕上的持续时间(以秒为单位)。
  • 第三个参数 FColor::Red 是消息的颜色。
  • 最后一个参数是要显示的实际文本消息。

显示变量

int32 MyValue = 42;
FString Message = FString::Printf(TEXT("The value of MyValue is: %d"), MyValue);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, Message);

效果如下:
在这里插入图片描述

注意事项

  • 使用 AddOnScreenDebugMessage 仅作为临时调试手段。在代码最终提交或发布之前,确保移除或注释掉所有此类调试消息。
  • 这种方法在编辑器模式和开发构建中都有效,但在发布构建中可能不会显示,因为发布构建通常会禁用调试工具。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用虚幻引擎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
发出的红包

打赏作者

小马学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值