AizuVR blog

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!

「面白法人カヤックVR分室」としても活動しています。詳細はこちら

UNETに入門してみた

ども、VR部員のゼロです。

今回は今更かもしれませんがUnityにあるネットワーク機能UNET を初めて触ったので備忘録として書こうと思います。 といってもほんとに触りの部分だけです。

  • NetworkManagerの設定

まず、Scene上でCreateEmptyで空のゲームオブジェクトを作成し、名前をNetworkManagerとします。 その後AddComponetでNetworkManagerとNetworkManager HDDをアタッチ。 これでNetworkManagerの設定は終わりみたいですね。

f:id:aizu-vr:20170414211645p:plain

  • プレイヤーを同期させる設定

今回はCubeの移動を同期させました。 CreateでCubeを作成 その後以下の移動のコードをCubeにつける

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour {

    [SerializeField]
    Rigidbody rig;
    [SerializeField]
    float speed = 2f;
   
    void Update () {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        this.transform.position += new Vector3(x,0,z)*Time.deltaTime * speed;    
    }
}

Add ComponetでNetwork IdenityとNetwork Transformをアタッチ Network TransformのTransformSyncModeをSync Transformに変更 Network IdentityのLocal Player Authorit にチェック

今回は操作を反映させるのは自分自身(ローカルのもの)なのでそれを判定するスクリプトをCube追加します。(自分の操作で相手のプレイヤーまで動いてしまわないように)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class DisableScript : NetworkBehaviour {

    [SerializeField]
    Behaviour behaviors;

    void Start () {
        if (!isLocalPlayer) {
            behaviors.enabled = false;
        }
    }
}

isLocalPlayerで自分自身かどうかを判定しているのと今回はネットワークの機能を使うので MonoBehaiviourではなく、NetworkBehaviourを継承するのが注意点ですね。

その後InspectorでbehaviorsにCubeのMovement.csを設定します。 最後にCubeをプレハブ化してNetworkManagerのSpawn InfoのPlayerPrefabを先ほどプレハブ化した Cubeに設定して終わりとなります。

あとはエディタ側で再生しLanHost(H)ボタンを押す。 ビルドしたアプリ側でLanClient©を押してそれぞれで移動してみると Cubeが同期するはずです。

最後にすごく簡単にまとめると

  • NetworkManagerはネットワークの状態を管理するもの

  • Scriptでネットワークの機能を使いたいときにはNetworkBehaviourを継承

  • ネットワークゲームでは他のPlayerを操作できてはまずいのでその判定をisLocalPlayerで行う

といった感じでしょうか。

今回はほんの触り程度だったので、そのうち変数のやり取りやアニメーションの同期なども やってみます。

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!