Unityで始めるオンラインゲーム制作 Photon Pun2超入門
こんにちはジェイです。みなさんはUnityでオンラインゲームを作りたいと思ったことはありますか?もし今からオンラインゲームを作るのであれば、Photonの新しいバージョンであるPun2で制作するのをおすすめします。
Photon Pun2導入
導入の手順は公式サイトであるこちらを参考にするのがよいです。 4. アプリケーションIDを入力してセットアップ完了まで終わらせればOKです。
実装
これで実装できます!オンライン上でCubeを動かすとこまで一気にやってしまいましょう。スクリプトファイルを作成し以下のコードを記述する。 簡単に解説すると、Start関数でPUNの設定ファイルを読み込み、
後ほど作成する「chara」プレハブをログイン後に生成するというスクリプトになります。
using UnityEngine;
using System.Collections;
using Photon.Pun;
using Photon.Realtime;
public class SimplePun : MonoBehaviourPunCallbacks
{
// Use this for initialization
void Start()
{
//旧バージョンでは引数必須でしたが、PUN2では不要です。
PhotonNetwork.ConnectUsingSettings();
if (string.IsNullOrEmpty(PhotonNetwork.NickName))
{
PhotonNetwork.NickName = "player" + Random.Range(1, 99999);
}
}
void OnGUI()
{
//ログインの状態を画面上に出力
GUILayout.Label(PhotonNetwork.NetworkClientState.ToString());
}
//ルームに入室前に呼び出される
public override void OnConnectedToMaster()
{
// "room"という名前のルームに参加する(ルームが無ければ作成してから参加する)
PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default);
}
//ルームに入室後に呼び出される
public override void OnJoinedRoom()
{
//キャラクターを生成
GameObject chara= PhotonNetwork.Instantiate("chara", new Vector3(0.0f,0.5f,0.0f), Quaternion.identity, 0);
//自分だけが操作できるようにスクリプトを有効にする
CharaScript charaScript = chara.GetComponent<CharaScript>();
charaScript.enabled = true;
}
}
次に Hierarchy上で右クリック、Create Emptyをクリックし、空のGameObjectを作成し、SimplePun.csのスクリプトをアタッチしましょう。
その次は、 Hierarchy上で右クリック 、3DObject→Cubeを選択し、以下のスクリプトをアタッチする。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharaScript : MonoBehaviour
{
void Start()
{
}
void Update()
{
if (Input.GetKey("up"))
{
transform.position += transform.forward * 0.05f;
}
if (Input.GetKey("down"))
{
transform.position -= transform.forward * 0.05f;
}
if (Input.GetKey("right"))
{
transform.Rotate(0, 100 * Time.deltaTime, 0) ;
}
if (Input.GetKey("left"))
{
transform.Rotate(0, -100 * Time.deltaTime, 0);
}
}
}
以下の画像を参考に、Componentを追加していきましょう。
追加対象は手順は以下になります。
- Photon View
- Photon Transform View (追加後、「Observed Component」に Photon Transform View を追加してください。)
※CharaScriptはチェックボックスを外してください。

作成した 「chara」 のプレハブを/Photon/Resources配下に配置してください。
※配置後はHierarchy上の 「chara」 は不要ですので削除しましょう。
実行結果
PunとPun2の違い
1つ目
Photon.MonoBehaviour
これは一番最初に困るところ。MonoBehaviourPunかMonoBehaviourPunCallbacksを使えばOKです。
2つ目
public override void OnJoinedLobby()
ロビーに接続する時に使う関数。代わりにpublic override void OnConnectedToMaster()を使えます。
3つ目
public override void OnPhotonRandomJoinFailed(object[] codeAndMsg)そして入室失敗した時の処理、これはルームがなくて入室失敗した際にルーム自分で作るよーって処理。Pun2の場合はわざわざ失敗した時の処理を書いて作成せずにOnConnectedToMasterでPhotonNetwork.JoinOrCreateRoom(“room", new RoomOptions(), TypedLobby.Default);
を使う事によってroomという名前のルームに参加(なければ作成)ということができます。
4つ目
PhotonNetwor.inRoomとか、photonView.isMineとかのis,inシリーズ
これらの対処は簡単で、iを大文字にするだけで対応してくれます。
PhotonMessageInfoの要素のsenderをSenderに、IDをUserIDに変更
sender.ID→Sender.UserIdに変更することで対応できます。
また ownerはOwnerに代わってます 。
5つ目
PhotonNetwork.ConnectUsingSettings(_gameVersion);
_gameVersionを消すだけで解決します。
6つ目
PhotonNetwork.playerName
これはplayerNameをNickNameに変えれば、解決します。
PhotonNetwork.playerはPhotonNetwork.LocalPlayerで代用ができます。
7つ目
photonView.RPC(“chat",Targets.All,~省略~);
Pun2だとTargets.Allがなくなったようです。RpcTarget.Allに変えることで対処できます。
8つ目
PhotonNetwork.player.ID;
これはint型が返されますがPhotonNetwork.LocalPlayer.UserId;はstring型が返されます。
using Photon.Pun;
using Photon.Realtime;
の上の2つを追加するのも忘れない様にしましょう。
以上PunとPun2の違いで気づいた点について、まとめてみました。 以下に詳しく書いてあるのでよかったら参考にしてください。
9つ目
PhotonNetwork.playerListがPhotonNetwork.PlayerListに変更になり、取得できる型名がPhotonPlayerからPlayerになりました。
10つ目
PhotonNetwork.connectedAndReadyは PhotonNetwork.IsConnectedAndReady になりました。