【Unity】ド初心者がPhoton2を使ってオンラインゲームを作りたい#0

はじめに

ボッチは辛い、悲しい、寂しい…

でもな!! 俺らにはオンラインゲームがあるんだよぉ!!!
顔も知らない遠くにいる人と一緒に気軽にゲームが出来る、そんな素晴らしく美しいものがオンラインゲームなんだよぉ!!そして俺はそんなオンラインゲームを作りたい!

でもオンラインゲームってどうやってつくるのぉぉぉ?
σ‐ ̄)ホジホジ・・・( ̄▽ ̄)δ⌒・ピンッ

1.どうやってマルチプレイを実装するのか

気合だけでは何も形にできないので、取り敢えずググってみたところ
何やらPhotonというものがあるらしい。

▼Photonとは

画像2

Photon Unity Networking(PUN)は、マルチプレイヤーゲーム対応のUnityパッケージです。 柔軟性の高いマッチメイキングによってプレイヤーはルームに入室し、ルーム内のオブジェクトはネットワーク上で同期されます。 RPC、カスタムプロパティ、または「低いレベル」のPhotonイベントなどの機能があります。 信頼性が高く、(オプションで)高速な通信が専用Photonサーバーによって実現されます。このため、クライアントは1対1で接続する必要はありません。
PUNはUnity対応の、ほぼすべてのプラットフォームへエキスポート可能です

とのことです…
要はサーバーの管理やその他の専門的な知識がなくても簡単にオンラインゲームをUnityで作れるよ!ってことでおk?

現在(21/05/27)Photonには旧バージョンのPUN classicとPUN2がありますがPUN2が最新なので今回はPUN2を使っていきます

※ちなみにPhotonは無料版と有料版がありますが、無料版でも最大20人までの接続が可能なようです!やったぜ


2.早速Photon2(PUN2)をUnityにインポートする

【アカウント登録】
まず公式サイトでPUNのアカウント登録をして、サインインする。

スクリーンショット 2021-05-26 234452

【アプリの作成】
サインインしたら「新しくアプリを作成する」ボタンを押します。
そしたらアプリ作成画面になり、Photonの種別をPhoton PUNにして、アプリ名を適当に入力して「作成する」ボタンを押してください。
※アプリ名、説明、URLは後から編集出来るらしいです

スクリーンショット 2021-05-27 000011

するとアプリケーションIDが確認できる画面になります。アプリケーションIDは後に使います。

スクリーンショット 2021-05-27 000302

【Unity側のセットアップ】
1.Unityのプロジェクトを作り、Photon2-FREEをインポートする。
2.インポートすると「PUN Wizard」が開くので、先ほど確認したアプリケーションIDを入力して「Setup Project」を押す。

スクリーンショット 2021-05-27 003637

3.PhotonServerSettingsというファイルが生成され、セットアップが完了


3.とりあえずオンラインゲームもどきを作る

今回は#0ということなので、プレイヤーの動きを同期(「あっち動いたらこっちでも動いてるぅぅぅ!!」ってやつを)する所までやります

【流れ】
1.マスターサーバーに接続
2.ルームを作成、既存の場合は参加
3.プレイヤーオブジェクトを生成する

わぁお!シンプルぅぅぅ


まず「Resources」フォルダを作ります

スクリーンショット 2021-05-27 024844

作ったResourcesフォルダにプレイヤーとなるプレハブを作成します
プレハブの子オブジェクトに視覚的に分かり易いようにCubeを配置します

スクリーンショット 2021-05-27 025118

スクリーンショット 2021-05-27 045933

そしたらプレハブにPhotonViewというコンポーネントを付けます

スクリーンショット 2021-05-27 025337

Playerを動かすスクリプト(PlayerMove)を書いて、貼り付けます

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

//PUNのコールバックを受け取れるようにする為のMonoBehaviourPunCallbacks
public class PlayerMove : MonoBehaviourPunCallbacks
{
   float speed = 5f;

   void Update()
   {
       if(photonView.IsMine)
       {
           this.transform.position += new Vector3(Input.GetAxis("Horizontal"),0, Input.GetAxis("Vertical"))*speed*Time.deltaTime; 
       }
   }
}

このままではオブジェクトを動かしても座標を同期できないので自動的に同期してくれるPhotonTransformViewコンポーネントを追加します

スクリーンショット 2021-05-27 045548

次にシーン上に適当にオブジェクトを作成し、以下の新規スクリプト(InstantiatePlayer)を作成し追加します

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;

//PUNのコールバックを受け取れるようにする為のMonoBehaviourPunCallbacks
public class InstantiatePlayer : MonoBehaviourPunCallbacks
{
   void Start()
   {
       //マスターサーバーに接続
       PhotonNetwork.ConnectUsingSettings();
   }

   //マスターサーバーに接続成功した時に呼ばれる
   public override void OnConnectedToMaster()
   {
       //Roomという名前のルームを作成する、既存の場合は参加する
       PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);
   } 
      
   //ルームへの接続が成功したら呼ばれる
   public override void OnJoinedRoom()
   {
       //Playerを生成する座量をランダムに決める
       var position = new Vector3(Random.Range(-3f,3f), 0.5f, Random.Range(-3f,3f));
       
       //Resourcesフォルダから"Player"を探してきてそれを生成
       PhotonNetwork.Instantiate("Player", position, Quaternion.identity);
   }
}

スクリーンショット 2021-05-27 031403

システム自体はこれで完成なので
あとは地面やカメラを作っていい感じにします。

最後にプロジェクトをビルドして実行してみると…

画像12

無事Cubeを同期して動かすことが出来ました!!
今回Photon2の基礎を学んだので次回はもっとゲームっぽいものを作ろうと思います。

この記事が気に入ったらサポートをしてみませんか?