برنامه نویسی

نحوه اجرای ارتباطات سوکت در موتور غیر واقعی و 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 ابزاری قدرتمند برای ایجاد تجربیات تعاملی و پویا است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا