1. kamayuki_fs

    No comment

    kamayuki_fs
Changes in tags
Changes in body
Source | HTML | Preview

概要

GameJamの事前勉強会のために作った資料です。
ここでは、ロビーからルームの自動入室、キャラクター位置の同期、チャットの実装までをチュートリアルアセットを利用して学習します。

前提

Photon Cloudのアカウントを作成済みであること
Unityがインストール済みであること

1.空のプロジェクト作成

Unityで空のプロジェクトを作成します。

2.アセットのインポート

Unity Asset StoreからPhotonのサンプルアセットをインポートします。

  • Photon Unity Networking Free

http://u3d.as/2ey

3.Photon Cloudの接続設定

PUN Wizardウィンドウが表示されるので、上から2番目のボタン”Setup”を押し、
punwizard

"Your AppId"に、Photon Cloudの管理画面に表示されているAppIDを、
"Cloud Region"は、”Japan”を選択し
”Save”を押して設定を終了します。
punwizard2

2956ba32-a017-446a-8adb-f0de57c02802

4.新しいシーンを作成する

"File -> New Scene"で新しいシーンを作成します。

5.Photon Cloudに接続する準備をする

"Hierarchy"に空のゲームオブジェクトを作成し(ここでは"photon script"と命名)、
photon script

"RandomMatchmaker"スクリプトをアタッチする。
randommatchmaker

ここでシーンを保存しておきます。

6.Playして動作を確認

ここまでのシーンを再生すると、何かがInstantiateされて床が無いので落ちていきます。
6_play

ここまでで実はもうできていること

  • Photonに接続
  • ロビーに入室
  • 部屋がなければ部屋を作成して入室
  • 入室後に自分のキャラクターをInstantiate

7.床をつくってあげる

planeとDirectional lightで簡単なステージを作成する。
(planeのマテリアルはインポートしたアセットに含まれている"Pavement_01"を使用)
make stage

8.Playして動作を再確認

自分のキャラクターがステージ上にあらわれて操作できることを確認します。
make stage

9.モデルを差し替える

(モデルが必要な人用)

  • ドロイメライちゃん

doroimeraiSD.unitypackage

  • ドロイド君

DoroidModel.unitypackage

まずは、Instantiateできるようにプレハブを作成します。
このときに、プレハブは"Resources"ディレクトリの下に入れるようにしてください。
(PhotonNetwork.Instantiateの第一引数はstring型。prefabは内部にキャッシュされていて、なかった場合にResources.Loadしているため)

droimerai prefab
作ったプレハブに、以下の4つのコンポーネントを追加します。

  • myThirdPersonController

PhotonUnityNetworkingアセットに含まれているもの
ThirdPersonControllerを継承したユーザスクリプト

IsControllableにチェックが入っているので、これをfalseにしておく

  • CharacterController

おなじみキャラクターコントローラ

  • PhotonView

PhotonUnityNetworkingアセットに含まれているもの
同期させる対象物に必ず必要なコンポーネント
UnityNetworkViewとほぼ同じもの

  • NetworkCharacter

PhotonUnityNetworkingアセットに含まれているもの
キャラクターの位置情報などを送受信するためのコンポーネント

add component prefab

"Photon View"コンポーネントの"Observe"に、今追加した"NetworkCharacter"スクリプトを設定します。
これによって、PhotonNetworkViewの観察対象として設定されます。

photon view observe

次に、"RandomMatchmaker"スクリプトを書き換えます。

before

RandomMatchmaker.cs
void OnJoinedRoom()
{
    GameObject monster = PhotonNetwork.Instantiate("monsterprefab", Vector3.zero, Quaternion.identity, 0);
    monster.GetComponent<myThirdPersonController>().isControllable = true;
    myPhotonView = monster.GetComponent<PhotonView>();
}

after

RandomMatchmaker.cs
void OnJoinedRoom()
{
    GameObject monster = PhotonNetwork.Instantiate("droimerai", Vector3.zero, Quaternion.identity, 0);
    monster.GetComponent<myThirdPersonController>().isControllable = true;
    myPhotonView = monster.GetComponent<PhotonView>();
}

これによって、入室時にInstantiateされるプレハブが変更されます。

10.Playしてモデルが差し替わっているか確認

kawaii
play droimerai

11.チャットの実装

次に、チャットの実装をします。
まずは空のゲームオブジェクトを作成します。
(今回は”Chat”と命名)
create gameobject chat
”Chat”ゲームオブジェクトに、以下の2つのコンポーネントを追加します。

  • Chat

PhotonUnityNetworkingアセットに含まれているもの
チャット用スクリプト

  • PhotonView

同期させる対象物に必ず必要なコンポーネント
UnityNetworkViewとほぼ同じもの

12.Playしてチャットが実装できているか確認

チャット用のUIができています
play chat

13.自分の名前を設定する

このままでは名無しさんなので、誰がチャットで発言したのかわかりません。ですので自分の名前を設定します。
今回は、"RandomMatchmaker"の中で設定します。

before

RandomMatchmaker.cs
void Start()
{
    PhotonNetwork.ConnectUsingSettings("0.1");
}

after

RandomMatchmaker.cs
void Start()
{
    PhotonNetwork.ConnectUsingSettings("0.1");

    if (string.IsNullOrEmpty(PhotonNetwork.playerName))
    {
        PhotonNetwork.playerName = "guest" + Random.Range(1, 99999);
    }
}

14.Playして自分の名前が設定できているか確認

ちゃんと”guest + ランダムな数字"になっています
chat name

まとめ

以上で、ロビーからルームの自動入室、キャラクター位置の同期、チャットの実装を終えました。

汎用的にできることが多い分、書けていない機能も多いので機会があれば続き書こうと思います。