[書き散らし]Unity Headlessでビルドしたものを AWS EC2上のDockerで動かす

2 min read読了の目安(約1800字

Unity Headless Server&Client実装サンプル & Build設定

https://www.youtube.com/watch?v=XsUIf1tK07I

https://github.com/Vadimskyi/UnityLinuxHeadlessServer

Server&Client間はENETというC#ライブラリを使っているよう。

localでサンプルを確認

Server側設定

  • GameObjectを作成し、"Server"をアタッチ。
  • portを適当(8000)に設定する
  • Run

Client側設定

  • GameObjectを作成し、"Client.cs"をアタッチ
  • PacketLabel, ErrorLabel用のTextを作成。
  • IPを"127.0.0.1", portをserver側で指定したもの, listenをTrueに指定。
  • Run

LinuxビルドしたものをLocalでDockerから起動してみる

myserver = Linuxビルドしたディレクトリ

Dockerfile

FROM ubuntu

EXPOSE 8000

COPY ./myserver /shared

WORKDIR /shared

CMD ./myserver.x86_64 -batchmode -logfile output.log & touch output.log ; tail -f output.log

Dockerビルド

$ docker build -t unitytest/myserver -f Dockerfile .

Docker-compose

version: '2'
services:
  server:
    image: unitytest/myserver
    ports:
      - "8000:8000"
$ docker-compose up 
Starting unity_server_1 ... done
Attaching to unity_server_1
server_1  |     Vendor:   Unity Technologies
server_1  | Begin MonoManager ReloadAssembly
server_1  | - Completed reload, in  0.034 seconds
server_1  | The referenced script on this Behaviour (Game Object '<null>') is missing!
server_1  | (Filename:  Line: 334)
server_1  |
server_1  | The referenced script on this Behaviour (Game Object '<null>') is missing!
server_1  | (Filename:  Line: 334)
server_1  |
server_1  | UnloadTime: 0.350000 ms
server_1  | Set current directory to /shared
server_1  | Found path: /shared/myserver.x86_64

headlessビルドしたものが動いてはいるよう。

AWSのEC2(elastic-ip付)にDocker, Docker-composeをインストール

https://qiita.com/y-do/items/e127211b32296d65803a

EC2上でDockerイメージを動かす

EC2にファイルをコピーする。

Headlessビルドしたディレクトリ, Dockerfile, docker-compose.ymlをEC2にファイルをコピーする。Localでおこなったように、Dockerイメージビルド、docker-compose up を行う。

EC2 SG設定

EC2のSG設定で、UDPポートを開けておく。

ClientからEC2に接続してみる。

Clientでipをelastic-ipを指定し、Runする。