概要
GameJamの事前勉強会のために作った資料です。
GameJam登録受付
http://kokucheese.com/event/index/95326/
ここでは、ロビーからルームの自動入室、キャラクター位置の同期、チャットの実装までをチュートリアルアセットを利用して学習します。
前提
Photon Cloudのアカウントを作成済みであること
Unityがインストール済みであること
1.空のプロジェクト作成
Unityで空のプロジェクトを作成します。
2.アセットのインポート
Unity Asset StoreからPhotonのサンプルアセットをインポートします。
- Photon Unity Networking Free
3.Photon Cloudの接続設定
PUN Wizardウィンドウが表示されるので、上から2番目のボタン”Setup”を押し、
"Your AppId"に、Photon Cloudの管理画面に表示されているAppIDを、
"Cloud Region"は、”Japan”を選択し
”Save”を押して設定を終了します。
2956ba32-a017-446a-8adb-f0de57c02802
4.新しいシーンを作成する
"File -> New Scene"で新しいシーンを作成します。
5.Photon Cloudに接続する準備をする
"Hierarchy"に空のゲームオブジェクトを作成し(ここでは"photon script"と命名)、
"RandomMatchmaker"スクリプトをアタッチする。
ここでシーンを保存しておきます。
6.Playして動作を確認
ここまでのシーンを再生すると、何かがInstantiateされて床が無いので落ちていきます。
ここまでで実はもうできていること
- Photonに接続
- ロビーに入室
- 部屋がなければ部屋を作成して入室
- 入室後に自分のキャラクターをInstantiate
7.床をつくってあげる
planeとDirectional lightで簡単なステージを作成する。
(planeのマテリアルはインポートしたアセットに含まれている"Pavement_01"を使用)
8.Playして動作を再確認
自分のキャラクターがステージ上にあらわれて操作できることを確認します。
9.モデルを差し替える
(モデルが必要な人用)
- ドロイメライちゃん
- ドロイド君
まずは、Instantiateできるようにプレハブを作成します。
このときに、プレハブは"Resources"ディレクトリの下に入れるようにしてください。
(PhotonNetwork.Instantiateの第一引数はstring型。prefabは内部にキャッシュされていて、なかった場合にResources.Loadしているため)
- myThirdPersonController
PhotonUnityNetworkingアセットに含まれているもの
ThirdPersonControllerを継承したユーザスクリプト
IsControllableにチェックが入っているので、これをfalseにしておく
- CharacterController
おなじみキャラクターコントローラ
- PhotonView
PhotonUnityNetworkingアセットに含まれているもの
同期させる対象物に必ず必要なコンポーネント
UnityNetworkViewとほぼ同じもの
- NetworkCharacter
PhotonUnityNetworkingアセットに含まれているもの
キャラクターの位置情報などを送受信するためのコンポーネント
"Photon View"コンポーネントの"Observe"に、今追加した"NetworkCharacter"スクリプトを設定します。
これによって、PhotonNetworkViewの観察対象として設定されます。
次に、"RandomMatchmaker"スクリプトを書き換えます。
before
void OnJoinedRoom()
{
GameObject monster = PhotonNetwork.Instantiate("monsterprefab", Vector3.zero, Quaternion.identity, 0);
monster.GetComponent<myThirdPersonController>().isControllable = true;
myPhotonView = monster.GetComponent<PhotonView>();
}
after
void OnJoinedRoom()
{
GameObject monster = PhotonNetwork.Instantiate("droimerai", Vector3.zero, Quaternion.identity, 0);
monster.GetComponent<myThirdPersonController>().isControllable = true;
myPhotonView = monster.GetComponent<PhotonView>();
}
これによって、入室時にInstantiateされるプレハブが変更されます。
10.Playしてモデルが差し替わっているか確認
11.チャットの実装
次に、チャットの実装をします。
まずは空のゲームオブジェクトを作成します。
(今回は”Chat”と命名)
”Chat”ゲームオブジェクトに、以下の2つのコンポーネントを追加します。
- Chat
PhotonUnityNetworkingアセットに含まれているもの
チャット用スクリプト
- PhotonView
同期させる対象物に必ず必要なコンポーネント
UnityNetworkViewとほぼ同じもの
12.Playしてチャットが実装できているか確認
13.自分の名前を設定する
このままでは名無しさんなので、誰がチャットで発言したのかわかりません。ですので自分の名前を設定します。
今回は、"RandomMatchmaker"の中で設定します。
before
void Start()
{
PhotonNetwork.ConnectUsingSettings("0.1");
}
after
void Start()
{
PhotonNetwork.ConnectUsingSettings("0.1");
if (string.IsNullOrEmpty(PhotonNetwork.playerName))
{
PhotonNetwork.playerName = "guest" + Random.Range(1, 99999);
}
}
14.Playして自分の名前が設定できているか確認
まとめ
以上で、ロビーからルームの自動入室、キャラクター位置の同期、チャットの実装を終えました。
汎用的にできることが多い分、書けていない機能も多いので機会があれば続き書こうと思います。
初学者向け問題はこちら
Photonサインアップマニュアル
published by
日本Androidの会 秋葉原支部 Unity部
https://www.facebook.com/groups/android.akb.unity/