Unity로 HTTP 요청을 처리해 보십시오.

8977 단어 Unity
유닛의 게임을 실행하는 동안 밖에서 HTTP로 메시지 제어를 보내고 싶어 게임 내에서 HTTP 요청을 처리하는 방법을 조사했다.
. NET 표준에 탑재된HttpListener을 사용하여 HTTP 요청을 받은 처리를 작성할 수 있습니다.최근 Unity에 스크립트 실행 시간이 개설되었습니다.NET4.6 환경에서 설정async/await할 수 있기 때문에 더 간단한 방법으로 설명할 수 있다.
이 기사는 Unity의 이벤트 시스템을 결합시켜 클릭 이벤트처럼 HTTP 요청을 처리할 수 있는 구조를 만들었다.

HTTP 서버의 구성 요소 만들기


먼저 다음 스크립트를 작성합니다.
HttpServer.cs
using System.Net;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[System.Serializable]
public class OnRequestEvent : UnityEvent<HttpListenerContext> { }

public class HttpServer : MonoBehaviour
{
  private HttpListener httpListener = new HttpListener();

  // エディター上から設定する
  public int port = 8080;
  public string path = "/";
  public bool startOnAwake = true;

  // リクエスト処理するイベントハンドラー。エディター上から設定する。
  public OnRequestEvent OnRequest;

  void Start()
  {
    httpListener.Prefixes.Add("http://*:" + port + path); // http://*:8080/ のようになる

    // コンポーネントの開始時に自動起動
    if (startOnAwake)
    {
      StartServer();
    }
  }

  // リクエストの受け付けを開始する
  public async Task StartServer()
  {
    httpListener.Start();

    while (true)
    {
      // リモートからの接続を待機
      var context = await httpListener.GetContextAsync();

      // 着信ログを表示
      Debug.Log("Request path: " + context.Request.RawUrl);

      OnRequest.Invoke(context);
    }
  }

  // サーバーを停止する
  public void StopServer()
  {
    httpListener.Stop();
  }

  // 破棄時にサーバーを止める
  void OnDestroy()
  {
    StopServer();
  }
}
그리고 장면에 빈 게임 대상을 만들고 위의 스크립트를 첨부합니다.

이렇게 될 것 같아서요.

HTTP 요청 처리


다른 빈 게임 대상을 만들고 다음 스크립트를 작성하십시오:.
MyRequestHandler.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;

public class MyRequestHandler : MonoBehaviour
{
  public string message = "Hello from Unity!";

  public void OnRequest(HttpListenerContext context)
  {
    // message の内容をバイト配列に変換してレスポンスを返す
    var data = System.Text.Encoding.UTF8.GetBytes(message);
    context.Response.StatusCode = 200;
    context.Response.Close(data, false);
  }
}

연결 스크립트


마지막으로 HTTP 서버의 스크립트와 HTTP 요청을 처리하는 스크립트를 붙입니다.HTTP 서버의 게임 대상을 선택하고, 색인기의 On Request (Http Listener Context) 부분의 오른쪽 아래에 있는 + 아이콘을 선택하여 항목을 추가합니다.

None(Object) 오른쪽에 있는 점을 선택하고 HTTP 요청을 처리할 스크립트가 설정된 게임 객체를 선택합니다.

No Function에서 My Request Handler→On Request 순으로 내려갑니다.

이렇게 되면 OK야.

시험해 보다


그럼, 이 정도면 게임을 해보자.브라우저 액세스http://localhost:8080/를 엽니다.이후 Unity 편집에 초점을 맞추지 않으면 스크립트가 실행되지 않습니다. HTTP 응답을 복구할 수 없습니다.
브라우저에 Hello from Unity! 라는 글자가 나오면 성공합니다.

좋은 웹페이지 즐겨찾기