MagicOnionでローカルでのゲームっぽいものを作る【Unity,gRPC,MagicOnion】

仕事でgRPCを触る機会があったので、せっかくだったら個人でもゲームっぽいものを作りたいということで n回目のMagicOnionに挑戦しました
(過去に二回ほど環境構築やらでつまづいています)

記事を書いていて特に書くことがないので、メモ程度になりました

Demo

ローカルPC内で複数のアプリから任意のルームへの参加して移動およびチャット機能の実装をしたデモ動画になります。
有料セットなどを抜いたRepositoryはこちらになるので、コードはRepositoryからご確認ください。

youtu.be

環境

  • Unity 2020.3.25f1

使用したアセット

SDトーコちゃん

実装部分

環境構築やサーバーとクライアントとの基本のデータ送信部分は参考サイトをそのままなので、サイトを見てください。

任意のPrefabを生成する

参考サイトでは基本オブジェクトの生成のみしかなかったので、せっかくなので好きなアバターを生成したいので簡単に以下のように変更しています。

  1. ゲームシーンに切り替わるまでサーバーとの通信を待機して、切り替わったら接続と同時にPrefab情報を登録。(*1)
  2. ClientHubからで登録されたPrefabを使ってプレイヤーモデルを生成
  3. サーバーにはPrefabのposition,rotationのみを送信(今回はモデルの種類は一つのため)

(*1)

_gamingHubClient = new GamingHubClient
{
    CharacterGameObject = otherPlayerPrefab
};
await _gamingHubClient.ConnectAsync(_channel);

(*2)

        void IGamingHubReceiver.OnJoin(Player player, string playerName)
        {
            var playerObject = Object.Instantiate(CharacterGameObject);

            if (player.Name == playerName)
            {
                _myObject = playerObject;
            }

            playerObject.GetComponent<CharacterHandler>().SetName(player.Name);

            playerObject.name = player.Name;
            playerObject.transform.SetPositionAndRotation(player.Position, player.Rotation);
            _players[player.Name] = playerObject;
        }

参考サイト

qiita.com

qiita.com

zenn.dev

zenn.dev