2017-05-03 2 views
0

NetworkServer/NetworkClient 간의 단일화 네트워킹 작업을하고 있습니다. NetworkManager를 사용하지 않습니다.GameObject를 전송하는 Unity NetworkServer/NetworkClient

다음은 클라이언트 코드의 일부입니다.

public void StartPaintClient() 
{ 
    client = new NetworkClient(); 
    client.Connect(host, port); 
    client.RegisterHandler(NetworkMeta.PaintPrefabId, OnMouseButtonDown); 
} 
public void OnMouseButtonDown(NetworkMessage netMsg) 
{ 
    var receivedPrefab = netMsg.ReadMessage<NetworkMeta.PaintPrefab>(); 
    GameObject prefab = Instantiate(receivedPrefab.p); 
    prefab.name = "" + index++; 

} 

여기는 서버 코드의 일부입니다.

public GameObject prefab; 
public void StartPaintServer() 
{ 

    if (NetworkServer.active) 
    { 
     Debug.Log("Server is already acitve"); 
     return; 
    } 
    NetworkServer.Listen(port); 
} 
void Update() 
{ 
    if(Input.GetMouseButtonUp(0)) 
    { 
      prefab = Instantiate(Line_Prefab); 
      var newPrefab = new NetworkMeta.PaintPrefab(); 
      newPrefab.p = prefab; 
      NetworkServer.SendToAll(NetworkMeta.PaintPrefabId, newPrefab); 
    } 
} 

두 가지 질문이 있습니다.

  1. 내가 대신 NetworkServer.Spawn(obj)NetworkServer.SendToAll(msgType, msg)이 전혀 콘솔 오류가 없었다하더라도 일을하지 않았다되어 사용 이유. 그 이유는 무엇입니까?
  2. 위의 코드도 문제가 있습니다. colsole 오류 MSG 때마다 NetworkServer.SendToAll(mspType, msg)

ArgumentException이 발생합니다 인스턴스화 할 개체가 null입니다.

나는 newPrefab.p 네트워크 프로그래밍 초보자를위한 모든 아이디어 널 .... 왜 이해하지?

답변

0

나는 Unet을 사용하지 않으며 그것에 대해 많이 알지 못하지만 프리 팹을 산란하기 전에 다음을 수행해야합니다.

. 프리 패브에는 NetworkIdentity 스크립트가 첨부되어야합니다.

. 스폰하기 전에 프리 팹을 등록해야합니다.

Networking.ClientScene.RegisterPrefab(Line_Prefab); 

NetworkServer.Spawn을 사용할 수 있습니다. 내가 직접 조립식에 NetworkServer.Spawn를 사용 하지 오전

var line = (GameObject)Instantiate(Line_Prefab, pos, rot); 
NetworkServer.Spawn(line); 

알 수 있습니다. (GameObject)Instantiate(Line_Prefab, pos, rot);으로 생성 된 GameObject에서 사용해야했습니다.

또한 편집기에서 변수에 프리 팹을 지정했는지 확인하십시오. 너는 네트워크에 객체를 털기에 관하여 더 많은 것을 배울 수있다 here.

+0

클라이언트 코드와 서버 코드를 구분하려면 어떻게해야합니까? 그 조립식은 어디에 보관해야합니까? 양쪽에서 (그것은 좋은 것처럼 보이지 않는다)? –

관련 문제