よく考えたら、ジャンルってコンピューター開発じゃなくてプログラミングですよね^^;
些細なことは置いておいて、[Unity]NetworkViewを使って通信対戦 その2。
今回は下の2つの手順の内、?を進めてみる。
?動かすオブジェクトの設定(プレイヤー)の設定
?ネットワークを管理するスクリプトの設定
オブジェクト(プレイヤー)の設定
基本的にオフラインの作りとほとんど同じように作れる。
移動はTransformで指定してやればいいし、
キー入力とかは、概ねそのまんまで問題ない。
注意することは2点。
・同期するTransformはワールド座標ではない。
・network.isMineを設定する
まずTransformについては、例えば、操作系は親オブジェクトに配置し
子オブジェクトのメッシュ(位置情報)だけ同期しようとしてもうまくいかない。
オブジェクトのパラメータを同期しているので、仕方がない。
もう一つ、network.isMineについて。
これはスクリプトを実行するオブジェクトが自分かどうかを判断するプロパティ。
これが無いと、別のネットワークに接続しているキャラクターも操作してしまう。
なので、isMineで自分以外のオブジェクトの操作系を外してやる必要がある。
具体的には、こんな感じ
if( true == network.isMine )
{
if( Input.GetKey(KeyCode.****)){ ... }
}
ネットワークでオブジェクトを同期させる設定
次に、作ったオブジェクトをネットワーク上で同期するように設定する。
とにもかくにも、Network View コンポーネントを同期したいオブジェクトに貼り付ける。
場所は、「Component→Miscellaneous→Network View」にある。
で、同期させたいオブジェクトをObserverd(監視)に設定する。
自分の環境だと、コンポーネントを貼りつけた地点で貼りつけたオブジェクトが設定されてる。
ちなみに、Network ViewのObservedで指定しているオブジェクトしか同期しない。
つまり子オブジェクトを同期したい場合は、子オブジェクトにもNetwork Viewを設定する必要がある。
例えば、FPSのキャラクターの位置と銃の方向を同期したい場合、
キャラクター(親オブジェクト・位置+向き)に1枚、銃(カメラの方向・上下)に一枚って形。
次は?、ネットワークを管理するスクリプトの設定だ。