네트워크 기술의 지속적인 개발로 실시간 전투 게임은 많은 플레이어가 가장 좋아하는 게임 유형이되었습니다. 강력한 서버 측 스크립팅 언어로서 PHP는 Unity3D와 같은 크로스 플랫폼 게임 엔진과 결합하여 흥미 진진한 실시간 전투 게임 경험을 만듭니다. 이 기사는 PHP의 Workerman Library를 사용하여 WebSocket 프로토콜을 통해 여러 플레이어 간의 실시간 커뮤니케이션과 상호 작용을 실시하여 실시간 전투 게임을 구축하는 방법을 소개합니다.
먼저 Workerman Library를 설치해야합니다. Workerman을 설치하려면 명령 줄에서 다음 명령을 실행하십시오.
composer require workerman/workerman
게임의 서버 측면을 구현하는 PHP 파일이라는 PHP 파일을 만듭니다. 먼저 Workerman의 자동로드 파일을 소개합니다.
require_once __DIR__ . '/vendor/autoload.php';
다음으로 WebSocket 서버를 빌드하고 포트 2345를 듣습니다.
use Workerman\Worker;
$ws_worker = new Worker("websocket://0.0.0.0:2345");
$ws_worker->count = 4;
$ws_worker->onMessage = function($connection, $data) {
// 플레이어가 보낸 프로세스 메시지
// ...
};
Worker::runAll();
이 코드에서는 WebSocket 프로토콜을 듣고 포트 2345에 바인딩하는 작업자 인스턴스를 만듭니다. 동시에 작업자 프로세스 번호를 4로 설정하고 OnMessage 콜백 기능에서 플레이어의 메시지를 처리합니다.
Unity3d에서 새 장면을 만들고 큐브 객체를 추가하십시오. 다음으로 GameClient.cs라는 C# 스크립트를 작성하고 스크립트의 서버 측면에서 통신 로직을 구현하십시오.
using UnityEngine;
using WebSocketSharp;
public class GameClient : MonoBehaviour
{
private WebSocket webSocket;
private void Start()
{
webSocket = new WebSocket("ws://localhost:2345");
webSocket.OnMessage += OnMessageReceived;
webSocket.Connect();
}
private void OnDestroy()
{
webSocket.Close();
}
private void OnMessageReceived(object sender, MessageEventArgs e)
{
// 수신 된 메시지를 처리하십시오
// ...
}
private void Update()
{
// 서버에 메시지를 보냅니다
// ...
}
}
이 코드에서는 서버 주소와 포트를 지정하는 WebSocket 인스턴스를 만듭니다. 수신 된 메시지는 OnMessage 이벤트 콜백 함수를 바인딩하여 처리하고 업데이트 기능에서 메시지를 서버로 보냅니다.
서버 측 코드에서는 각 플레이어에게 고유 식별자를 할당하여 다른 플레이어를 구별 할 수 있습니다. 클라이언트 코드에서 서버가 플레이어를 식별 할 수 있도록 메시지를 보낼 때 식별자가 수행됩니다.
서버 측 코드 예 :
$ws_worker->onMessage = function($connection, $data) {
$clientId = $connection->id;
// 플레이어가 보낸 프로세스 메시지
// ...
};
클라이언트 코드 예 :
private void Update()
{
// 서버에 메시지를 보냅니다
webSocket.Send("Player: " + playerId + " message");
}
위의 코드를 통해 여러 플레이어 간의 실시간 커뮤니케이션을 실시한 다음 간단한 실시간 전투 게임을 구축합니다.
이 기사는 PHP에서 Workerman Library를 사용하는 방법을 소개하고 Unity3D 엔진을 결합하여 WebSocket을 기반으로 실시간 전투 게임을 구축합니다. PHP와 Unity3D의 조합을 통해 여러 플레이어 간의 실시간 커뮤니케이션과 상호 작용을 실현하여 플레이어에게 더 부드러운 게임 경험을 제공합니다. 물론 위의 코드는 간단한 데모 일 뿐이며 요구 사항에 따라 실제 게임 개발을 확장하고 최적화해야합니다.