イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

UNET StartHost,StartClient,Spawnのサンプル

---

最初にクライアントに接続、接続できなければホストがないと見なしてホストを開始し、登録されたオブジェクトをSpawnする

http://motoyama.hateblo.jp/entry/unet-10

---

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

public class Apple : NetworkBehaviour
{
  // Start is called before the first frame update
  [SerializeField] NetworkManager NManager;
  [SerializeField] GameObject TestPrefab;
  bool isCreate = false;
  void Start(){
    var nc = NManager.StartClient();
    if(!nc.isConnected){
      NManager.StartHost();
      SpawnObject();
    }
  }

  void SpawnObject(){
    var enemy = (GameObject)Instantiate(TestPrefab, Vector3.zero,Quaternion.identity);
    NetworkServer.Spawn(enemy);
  }
}

---

サーバー接続時、クライアント接続時にメッセージを表示

UNET⑭ NetworkManagerをカスタマイズして、プレイヤー生成処理などを独自のものにする - MOTOYAMA BLOG

NetworkManagerはプロジェクト内で一つにしないと正常に機能しないっぽい

ホストは自身にサーバーを作ると同時にそのサーバーにローカルクライアントとして接続するので、ホスト側はServerConnectとClientConnectの両方のメッセージが表示される

isConnectedでチェックしないと二回コールされるので、どうも接続失敗時にもコールバックは起きるっぽい

IP,ポートの設定はNetworkManager.networkAddress,.networkPortにセットすればいい

---

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

public class MyNetworkManager : NetworkManager
{
  [SerializeField] Text CText;
  public override void OnServerConnect(NetworkConnection conn){
    if(conn.isConnected){
      CText.text += "ServerConnect MyNetworkManager\n";
      Debug.Log("ServerConnect MyNetworkManager");
    }

   }

   public override void OnClientConnect(NetworkConnection conn){
     if(conn.isConnected){
       CText.text += "ClientConnect MyNetworkManager\n";
       Debug.Log("ClientConnect MyNetworkManager");
     }
   }

}