Unityのネットワークについて調べて勉強になったサイト

公式サイト

http://docs-jp.unity3d.com/Documentation/Manual/NetworkedMultiplayer.html

コミュニティーサイトなど

http://www.slideshare.net/koppepan/unity-16450853

サンプルソースコード

https://github.com/anchan828/unity-network-sample

ローカルネットワークのアドレスを確認する方法

http://www.akakagemaru.info/port/windows7.html

マスターサーバのソースコードのダウンロード場所

http://unity3d.com/master-server

上記サイトで分からなかった事を理解した事

RPCについて

by http://docs-jp.unity3d.com/Documentation/Components/net-RPCDetails.html

RPCはリモート(Remote)マシンの関数(Procedure)呼び出し(Calls)を可能にする。

全てのネットワーク通信はNetworkViewコンポーネントで行うためRPC関数を宣言したスクリプトに呼び出し前にアタッチする必要があります。無題

状態同期(State Synchronization)について

by http://docs-jp.unity3d.com/Documentation/Components/net-StateSynchronization.html

サンプルソースコードについて

サンプルコードの抜粋

foreach (GameObject go in FindObjectsOfType (typeof(GameObject))) go.SendMessage (“OnNetworkLoadedLevel”, SendMessageOptions.DontRequireReceiver);

SendMessage関数について

by http://docs-jp.unity3d.com/Documentation/ScriptReference/GameObject.SendMessage.html

FindObjectsOfType関数について

http://docs-jp.unity3d.com/Documentation/ScriptReference/Object.FindObjectsOfType.html

OnNetworkLoadedLevel関数について

マスターサーバへの接続確立とホストサーバの立ち上げというネットワークの事はAssets→PrefabファルダにあるConnectionGUIプレハブがやってくれるのでネットワークの実装とゲームの実装を切り離してプログラム出来る。ゲームの実装はConnectionGUIプレハブのNetworkLevelLoad.csのgo.SendMessage(“OnNetworkLoadedLevel”,//・・・略から呼び出される、各オブジェクトのOnNetworkLoadedLevel関数に書き込む事だけを考えればいい。

オリジナルのプレイヤーオブジェクトの作り方

新規作成したオブジェクトにNetwork Interpolated Transformスクリプトを追加する。Network Interpolated Transformスクリプトの内容は良く分からないが機能的に同期を取るための設定のよう。これを新規追加したNetwork ViewコンポーネントのObservedにドラッグアンドドロップして適応させる。無題

ネットワーク上でNetwork.Instantiate関数を用いてインスタンス化されたオブジェクトに対して呼び出される関数OnNetworkInstantiateの作成をするために適当なクラスを作成(例えば上記の画像のようにThird Person Network Init 2)して、この中に以下のようなスクリプトを書き込む。

using UnityEngine;
using System.Collections;

public class ThirdPersonNetworkInit2 : MonoBehaviour {

void OnNetworkInstantiate (NetworkMessageInfo msg)
	{
		// This is our own player
		//自身のプレイヤーオブジェクトかどうかをnetworkView.isMineで判別し
		//そうであればNetworkInterpolatedTransformスクリプトをオフにし
		//リモート側のプレイヤーオブジェクトであればNetworkInterpolatedTransformスクリプトをオンにする
		if (networkView.isMine) {
			GetComponent ().enabled = false;
			// This is just some remote controlled player
		} else {
			name += "Remote";
			GetComponent ().enabled = false;
			GetComponent ().enabled = true;
		}
	}
}

ネットワーク レベルロード

by http://docs-jp.unity3d.com/Documentation/Components/net-NetworkLevelLoad.html

コメントを残す

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