نحوه اجرای ارتباطات سوکت در موتور غیر واقعی و Node.js

در این آموزش ، ما چگونگی اجرای ارتباطات سوکت بین سرور Node.js و هر دو موتور Unreal 5 (UE5) و وحدت را با استفاده از WebSockets بررسی خواهیم کرد. در حالی که هر دو موتور غیر واقعی و وحدت سیستم عامل های عالی برای ایجاد برنامه های کاربردی در زمان واقعی هستند ، هر یک از آنها روش های منحصر به فردی برای دستیابی به ارتباطات سوکت دارند. به عنوان معلمی که یک رویکرد با وفاداری و بصری غوطه وری را تشویق می کند ، از موتور غیر واقعی فکر کنید ، در حالی که وحدت تمایل دارد کمی ساده تر و در دسترس برای توسعه سریع باشد.
بیایید به این موضوع بپردازیم که چگونه می توانید ارتباطات سوکت را در هر دو موتور تنظیم کنید و ببینیم که چگونه سبک های آموزشی منحصر به فرد آنها بازی می شود.
پیش نیازهای
قبل از شروع ، اطمینان حاصل کنید که موارد زیر را نصب کرده اید:
-
node.js و npm: node.js را نصب کنید
-
موتور غیر واقعی 5 (UE5)
-
وحدت (برای مقایسه)
-
ویژوال استودیو (برای توسعه موتور غیر واقعی)
1. تنظیم سرور Node.js WebSocket
بیایید ابتدا یک سرور WebSocket ساده با استفاده از WS ، یک کتابخانه محبوب WebSocket برای Node.js. ایجاد کنیم. این به عنوان “معلم” ما در این قیاس عمل می کند و درس (پیام) را به دانش آموزان موتور غیر واقعی و وحدت ارائه می دهد.
نصب ws
کتابخانه:
npm init -y
npm install ws
سرور WebSocket را ایجاد کنید (server.js
):
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
console.log('New connection established');
ws.on('message', message => {
console.log(`Received message: ${message}`);
// Send back a response to the client
ws.send('Message received by Node.js server!');
});
ws.on('close', () => {
console.log('Connection closed');
});
});
// Handle server errors
wss.on('error', err => {
console.error('WebSocket Server Error:', err);
});
console.log('WebSocket server running on ws://localhost:8080');
سرور WebSocket را اجرا کنید:
node server.js
سرور شما اکنون آماده و قادر به دریافت و پاسخ دادن به پیام های مشتری های غیر واقعی و Unity است.
2. موتور Unreal 5 WebSocket Client
حال بیایید ببینیم که چگونه موتور غیر واقعی به عنوان “دانش آموز” راه اندازی می شود ، آماده دریافت درس (پیام) و با استعداد منحصر به فرد خود برای گرافیک های با کیفیت بالا و تعامل همهجانبه است.
مرحله 1: پشتیبانی WebSocket را در UE5 فعال کنید
برای فعال کردن WebSocket
پشتیبانی ، اضافه کردن WebSockets به PublicDependencyModuleNames
در شما YourProject.Build.cs
:
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "WebSockets" });
مرحله 2: یک بازیگر مشتری WebSocket را به صورت غیر واقعی ایجاد کنید
حال ، بیایید یک مشتری WebSocket را در موتور غیر واقعی ایجاد کنیم که به سرور Node.js ما وصل شود.
WebSocketClientActor.h:
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "WebSocketsModule.h"
#include "IWebSocket.h"
#include "WebSocketClientActor.generated.h"
UCLASS()
class YOURPROJECT_API AWebSocketClientActor : public AActor
{
GENERATED_BODY()
public:
AWebSocketClientActor();
protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
private:
TSharedPtr WebSocket;
void SetupWebSocket();
void OnWebSocketMessageReceived(const FString& Message);
};
WebSocketClientActor.cpp:
#include "WebSocketClientActor.h"
#include "Engine/Engine.h"
AWebSocketClientActor::AWebSocketClientActor()
{
PrimaryActorTick.bCanEverTick = true;
}
void AWebSocketClientActor::BeginPlay()
{
Super::BeginPlay();
SetupWebSocket();
}
void AWebSocketClientActor::SetupWebSocket()
{
if (!FModuleManager::Get().IsModuleLoaded("WebSockets"))
{
FModuleManager::Get().LoadModule("WebSockets");
}
WebSocket = FWebSocketsModule::Get().CreateWebSocket(TEXT("ws://localhost:8080"));
WebSocket->OnConnected().AddLambda([]()
{
UE_LOG(LogTemp, Log, TEXT("Successfully connected to WebSocket server"));
});
WebSocket->OnConnectionError().AddLambda([](const FString& Error)
{
UE_LOG(LogTemp, Error, TEXT("WebSocket Connection Failed: %s"), *Error);
});
WebSocket->OnClosed().AddLambda([](int32 StatusCode, const FString& Reason, bool bWasClean)
{
UE_LOG(LogTemp, Log, TEXT("WebSocket Closed: %s"), *Reason);
});
WebSocket->OnMessage().AddLambda([this](const FString& Message)
{
UE_LOG(LogTemp, Log, TEXT("Received WebSocket Message: %s"), *Message);
OnWebSocketMessageReceived(Message);
});
WebSocket->Connect();
}
void AWebSocketClientActor::OnWebSocketMessageReceived(const FString& Message)
{
if (Message.Contains("color"))
{
// Change the color of the actor based on the message
UStaticMeshComponent* MeshComp = FindComponentByClass();
if (MeshComp)
{
FLinearColor Color = FLinearColor::Red;
UMaterialInstanceDynamic* DynMaterial = MeshComp->CreateAndSetMaterialInstanceDynamic(0);
if (DynMaterial)
{
DynMaterial->SetVectorParameterValue(TEXT("BaseColor"), Color);
}
}
}
}
void AWebSocketClientActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (WebSocket && WebSocket->IsConnected())
{
WebSocket->Send(TEXT("Hello from Unreal Engine!"));
}
}
3. مشتری Unity WebSocket (برای مقایسه)
وحدت ، در مقایسه با غیر واقعی ، تمایل به رویکرد ساده تر دارد و آن را به ابزاری عالی برای کسانی که به دنبال یک راه حل سبک اما مؤثر هستند ، تبدیل می کند. در اینجا نحوه اجرای همان عملکرد در وحدت آورده شده است:
بسته WebSocketSharp را از طریق NUGET نصب کنید یا وارد کنید WebSocket
افزونه
یک اسکریپت مشتری WebSocket ایجاد کنید:
using System.Collections;
using UnityEngine;
using WebSocketSharp;
public class WebSocketClient : MonoBehaviour
{
private WebSocket ws;
void Start()
{
ws = new WebSocket("ws://localhost:8080");
ws.OnOpen += (sender, e) => {
Debug.Log("WebSocket connected.");
};
ws.OnMessage += (sender, e) => {
Debug.Log("Received: " + e.Data);
// Handle the message
HandleMessage(e.Data);
};
ws.Connect();
}
void HandleMessage(string message)
{
if (message.Contains("color"))
{
GetComponent().material.color = Color.red; // Example for Unity
}
}
void Update()
{
if (ws != null && ws.IsAlive)
{
ws.Send("Hello from Unity!");
}
}
void OnApplicationQuit()
{
if (ws != null)
{
ws.Close();
}
}
}
4. مقایسه موتور غیر واقعی و وحدت: دو معلم با سبک های مختلف
موتور غیر واقعی ، با سیستم قوی C ++ و کار با دارایی بسیار دقیق ، مانند معلمی است که دانش آموزان را از طریق درسهای پیچیده با غوطه وری عمیق راهنمایی می کند. ممکن است خود را سریعتر یاد بگیرید که مفاهیم پیشرفته را یاد بگیرید ، اما پیچیدگی می تواند در بعضی مواقع یک چالش باشد.
از طرف دیگر وحدت ، رویکرد در دسترس تری را ارائه می دهد. این مانند معلمی است که مفاهیم را ساده می کند و به دانش آموزان کمک می کند تا سریعتر دست خود را با پروژه های دنیای واقعی کثیف کنند. اگر به دنبال ایجاد یک برنامه ساده تر مبتنی بر WebSocket هستید ، ممکن است محیط وحدت برای نمونه سازی سریع مناسب تر باشد.
با وجود این اختلافات ، هر دو موتور در ارتباطات در زمان واقعی برتری دارند و آنها را برای برنامه های تعاملی انتخاب می کنند. انتخاب بین وحدت و موتور غیرواقعی به نیازهای پروژه شما کاهش می یابد – خواه به وفاداری زیاد غیر واقعی یا تکرار سریع و انعطاف پذیری وحدت نیاز داشته باشید.
5. نتیجه گیری
با استفاده از WebSockets ، هر دو Eneral Engine 5 و Unity می توانند به طور مؤثر با یک سرور Node.js WebSocket ارتباط برقرار کنند و تعامل در زمان واقعی را در انواع برنامه ها فراهم می کنند. این که آیا شما از ابزارهای همهجانبه ساخت و ساز در جهان و یا چرخه توسعه سریع مرحله یونیتی استفاده می کنید ، ارتباطات WebSocket ابزاری قدرتمند برای ایجاد تجربیات تعاملی و پویا است.