HIROMARTBLOG

Unity、Cocos2d-xのこととか書けたらいいですね。

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~同期されるオブジョクトの生成~

   

前回の記事でサーバーへの接続を行いました。

今回は、オンラインで同期されるゲームオブジェクトの生成をしていきたいと思います。

ゲームオブジェクトの生成

普段、Unityでゲームオブジェクトを生成する時は、Prefabにしたモノを直接指定していると思います。

Instantiate(prefab, new Vector3(0f, 0f, 0f), Quaternion.identity);

こんな感じですよね。

これで生成されてもオンライン上では同期がされずにそれぞれで生成されるだけです。

試しに、この方法でPhotonサーバーに接続された状態でゲームオブジェクトを生成してどうなるのか見てみましょう。

使うゲームオブジェクトは、ユニティちゃんの2Dモデルにします。

Scene「PhotonWorld1-1」の中に「DemoUnityChan2D」をPrefab化します。

そして、前回作ってもらった「PhotonSystem」のOnJoinedRoom()の中にInstanceを書きます。

これで、サーバーに接続して、部屋に入室したタイミングでユニティちゃん2Dが生成されます。

 


using UnityEngine;
using System.Collections;

public class PhotonSystem : Photon.MonoBehaviour {

public GameObject prefab;

///
/// マスターサーバーのロビーに入るに呼び出されます。
///

void OnJoinedLobby() {
Debug.Log("ロビーに入室");
//ランダムにルームへ参加
PhotonNetwork.JoinRandomRoom();
}

///
/// 部屋に入るとき呼ばれます。
/// これは参加する際だけでなく作成する際も含みます。
///

void OnJoinedRoom() {
Debug.Log("部屋に入室");
Instantiate(prefab, new Vector3(0f, 0f, 0f), Quaternion.identity); //プレイヤーをインスタンス化

}

///
/// JoinRandom()の入室が失敗した場合に後に呼び出されます。
///

void OnPhotonRandomJoinFailed() {
Debug.Log("部屋入室失敗");
//名前のないルームを作成
PhotonNetwork.CreateRoom(null);
}

void Awake() {
//マスターサーバーへ接続
PhotonNetwork.ConnectUsingSettings("v0.1");
}
}

 

25行目に追加したのが生成処理です。

変数GameObjectにユニティちゃんの2DのPrefabを入れています。

PhotonCloud_22

また、[CameraController]で最初にユニティちゃんがいないとtargetがnulllで実行が止まってしまうのでとりあえずif分でnullなら処理をしないようにしておきます。

[CameraController]全体を貼ると大きく場所を取るので変更部分がある[LateUpdate()]だけ書きます。


void LateUpdate()
 {
 var right = m_camera.ViewportToWorldPoint(Vector2.right);
 var center = m_camera.ViewportToWorldPoint(Vector2.one * 0.5f);

if (target != null) {

if (center.x < target.position.x) {
 var pos = m_camera.transform.position;

if (Math.Abs(pos.x - target.position.x) >= 0.0000001f) {
 m_camera.transform.position = new Vector3(target.position.x, pos.y, pos.z);
 }
 }

if (stopPosition.position.x - right.x < 0) {
 StartCoroutine(INTERNAL_Clear());
 enabled = false;
 }
}
 }

Instanceでの検証

では、一度実行してみましょう。

PhotonCloud_23

こんな感じで、ユニティちゃんが生成されたと思います。

次に、2つゲームを起動させて同期するか検証してみましょう。

2つの同時起動

2つ起動させるためには、Unity上だけでは出来ません。

一度Buildをして、実行ファイルを作成します。

PhotonCloud_24

今は、[PhotonWorld1-1]だけ実行出来たらよいのでとりあえず赤枠で囲んだすべてのチェックを外してBuildしてください。

そして、実行してください。

PhotonCloud_25

実行ファイルとUnity上、2つ実行出来たと思います。

1つ1つでは正常に動いていますが、これだとそれぞれのユニティちゃんが非同期です。

これを次は同期させてみましょう。

同期するためのInstance

同期させるためには、ゲームオブジェクトの生成方法を少し変える必要があります。

Instanceを次のように変更します。

PhotonNetwork.Instantiate(“DemoUnityChan2D”, new Vector3(0f, 0f, 0f), Quaternion.identity, 0);

こんな感じです。

先ほどは

Instantiate(prefab, new Vector3(0f, 0f, 0f), Quaternion.identity);

これでした。

InstanceがPhotonNetwork.Instantiateに、Prefabが”DemoUnityChan2D”に変わり、最後に0がつきました。

PhotonNetwork.InstantiateはPhotonで同期する場合に使うからという感じで覚えてもらい、

“DemoUnityChan2D”は、GameObjectを指定するのでなく生成するPrefabの名前を指定するというカタチに変わりました。

最後の0は、とりあえず今は0のままで大丈夫です。

そして、生成するPrefabを置く場所も変更する必要があります。

先ほどのユニティちゃん2DをPrefab化したものを

[Assets]→[Photon Unity Networking]→[Resources]の中に移動させてください。

また、Prefab化したユニティちゃんに[Photon View]というScriptを追加してください。

Photonで同期するオブジョクトには絶対に追加するモノと覚えてもらえればいいです。

PhotonCloud_26

 

これでもう一度実行してみましょう。

PhotonNetwork.Instantiateでの検証

実行方法は、先ほどと一緒でBuildして実行ファイルを作成。

実行ファイルとUnity上で実行をして2つ実行させます。

PhotonCloud_27

こんな感じで、2つ実行が完了すると二人のユニティちゃんが出たと思います。

まとめ

今回は、Photonで同期する場合のゲームオブジェクトの生成方法について書いていきました。

ただ、今のままだと片方で動かしてももう片方では動いていないと思います。

次回は、それを動くように変更していきたいと思います。

では。

ユニティちゃんライセンスこのアセットは、『ユニティちゃんライセンス』で提供されています。このアセットをご利用される場合は、『キャラクター利用のガイドライン』も併せてご確認ください。

 - PhotonCloud, Unity , , , , ,

広告

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

  関連記事

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~アニメーションの同期~

目次1 前回の記事の変更2 Photon Animator Viewの追加3 o …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~ゲームスタートボタン・リセットボタンの設置~

前回までで、ゲームのシステムがほぼ出来ました。 自機を動かす事、敵を生成する事、 …

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~導入編~

今回から数回に分けて、UnityとPhotonCloudを使って、リアルタイムオ …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~衝突判定の設定2~

前回の記事の最後で言っていた、敵の弾が宇宙戦闘機に衝突した時の処理を今回書いてい …

プログラミング初心者でもゲームが作れる!「Unity5」のインストール方法

今日、アップデートされたばかりの「Unity5」のインストールの方法を紹介してい …

Unity Adsの使い方・導入方法~Unityで作ったゲームで広告収入~

今回は、Unity Adsの使い方・導入方法を書いていきます。   目 …

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~オブジョクトの同期~

前回の記事では、同期するオブジョクトの生成を行ってもらいました。 今回は、オブジ …

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~カメラを追随させる~

前回の記事でアニメーションの同期を行いました。 今回の記事では、カメラをそれぞれ …

Unity5にVisual Studio Tools for Unity ( UnityVS ) を追加する方法

最近リリースされた、Unity5では、今までのUnity4.6などと同じ方法では …

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~検証編~

前回の記事で、PhotonCloudをUnityに導入する事が出来たと思います。 …