UnityでEOSを使う備忘録
2023/11/10追記
Unity向けのプラグインが用意されているので、こちらを使うと良さそうです。
https://github.com/PlayEveryWare/eos_plugin_for_unity
UnityでEpicOnlineServicesを導入した時の備忘録です。
P2Pを利用するまでにつまづいた点など。
手順書というよりは、困った誰かの検索に引っかかれば良いなという感じです。
利用ライブラリ
・EpicOnlineServices C# v1.13
・UniTask (Callbackが多いのでawaitできるようラップ)
必要なもの
・Epicアカウント2個
利用するInterface
P2Pを実装するまでに必要なInterface
https://dev.epicgames.com/docs/services/ja/Interfaces
・PlatformInterface (SDKの起動)
・AuthInterface (DeveloperToolを通してEpicユーザログイン)
・ConnectInterface (ゲームへのログイン)
・LobbyInterface (マッチング・他のユーザのIDを取得)
・P2PInterface (パケット送受信)
導入・Platform・Auth
基本的にはC#(Unityユーザ)向けのページを見れば、各種設定・PlatformInterface・AuthInterfaceまわりは実装できます。
後半のサンプルコードはコピペしたほうが良いです。UnityEditorで動かすための専用処理が含まれていました。
Auth (Developer Tool)
開発中のログインはデベロッパー認証ツールを使ったほうが便利そうです。ゲームを開始するたびにパスワードを打ち直す手間を省けます。
ログイン情報を保持するだけのツールのため、LobbyやP2Pでの接続確認のためにEpicアカウントは2つ必要です。
Connect
Authのログイン時に取得したTokenを用いて、ProductUser(ゲーム固有アカウント)の作成やログインを行います。
ここで最終的に取得できるProductUserIdは、後の処理で使用します。
Lobby
ロビーの作成や参加ができます。LobbyIdや属性を指定してロビーを検索できます。
ここで最終的に取得できる相手のProductUserIdは、後の処理で使用します。
P2P
自分と相手のProductUserIdを用いて、Packetを送受信します。
相手のProductUserIdが分かった時点で、とりあえずAcceptConnectionしとけば良さそうです。
Androidビルド
Unity向けの情報はまだまとまっていないようです。以下のページを参考にしました。
・https://dev.epicgames.com/docs/services/ja/Platforms/Android
・https://eoshelp.epicgames.com/s/question/0D52L00004jCz7RSAS
やることは以下の通りです。
プラグイン設定
・SDK/Bin/Android/aar/eos-sdk.aarがAndroidだけincludeされるようにチェックを入れる。
・SDK/Bin/Android/libs/以下にあるlibEOSSDK.soはincludeされないようにチェックを外す。(aarに同じ物が入っているため)
・AndroidNDKのディレクトリにあるlibc++_shared.soを、Assets/Android/libs/以下にコピーする。
gradle設定
PlayerSettingsのBuild項目からTemplateを追加できます。
・gradleTemplateに以下を記述する。
android.useAndroidX=true
・mainTemplateのdependenciesブロックに以下を記述する。
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.security:security-crypto:1.0.0-rc01'
implementation(name: 'eos-sdk', ext:'aar')
C#コード
・Awake()の中など、EOSを利用する前に以下を記述する。(CreateDeviceIDの実行に必要)
#if UNITY_ANDROID && !UNITY_EDITOR
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var context = activity.Call<AndroidJavaObject>("getApplicationContext");
var EOS_SDK_JAVA = new AndroidJavaClass("com.epicgames.mobile.eossdk.EOSSDK");
EOS_SDK_JAVA.CallStatic("init", context);
#endif
この記事が気に入ったらサポートをしてみませんか?