Help us understand the problem. What is going on with this article?

Photon Cloud × Unity GameJam 事前勉強会資料

More than 5 years have passed since last update.

概要

GameJamの事前勉強会のために作った資料です。

GameJam登録受付
http://kokucheese.com/event/index/95326/

ここでは、ロビーからルームの自動入室、キャラクター位置の同期、チャットの実装までをチュートリアルアセットを利用して学習します。

前提

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

まとめ

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

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

初学者向け問題はこちら

Unityに関する初歩問題

Photonサインアップマニュアル

Photonサインアップマニュアル

published by

日本Androidの会 秋葉原支部 Unity部
https://www.facebook.com/groups/android.akb.unity/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした