2013-04-19 4 views
1

나는 몇 가지 기본적인 동작을 가진 두 명의 플레이어가있는 유니티 네트워크 게임을하고 있습니다. 한 플레이어는 서버에 의해 제어되고 다른 플레이어는 클라이언트에 의해 제어됩니다.Unity3D의 멀티 플레이에서의 동기화

이 작업을 수행하기 위해 클라이언트/서버 연결을 만들었습니다. 연결이 끝나면 양쪽 플레이어 모두 화면에서 볼 수 있습니다. 나는 RPC 방법을 사용했다.

이제 서버에서 이동하면 서버 플레이어가 클라이언트 측에서 이동하는 것을 볼 수 있습니다. 이는 동기화되었음을 의미합니다. 그러나 클라이언트 쪽에서 이동하면 클라이언트 플레이어 만 이동합니다. 나는 서버 측에서 그 움직임을 볼 수 없다. 왜이 기능이 작동하지 않습니까?

나는이 코드를 UnityScript로 작성했습니다. 당신이 선수를 인스턴스화 곳

#pragma strict 
var farword:boolean=false; 
var backword:boolean=false; 

var FirstPlayer:GameObject; 
var SecondPlayer:GameObject; 

var isFarword=false; 
var isBackword=false; 
function Update() { 

    if(isFarword) 
    { 
     networkView.RPC("ChangePos",RPCMode.All); 
     isFarword=false; 
    } 
} 

@RPC 
function ChangePos() 
{ 
    if(isFarword) 
    { 
     if(Network.isServer) 
     { 
      FirstPlayer.transform.Translate(0,0,1); 
      isFarword=false; 
     } 
     if(Network.isClient) 
     { 
      SecondPlayer.transform.Translate(0,0,1); 
      isFarword=false; 
     } 
    } 
    else if(isBackword) 
    { 
     if(Network.isServer) 
     { 
      FirstPlayer.transform.Translate(0,0,-1); 
      isBackword=false; 
     } 
     if(Network.isClient) 
     { 
      SecondPlayer.transform.Translate(0,0,-1); 
      isBackword=false; 
     } 
    } 
} 

function OnGUI() 
{ 
    if(GUI.RepeatButton(new Rect(1000,100,80,70),"Farword")) 
    { 
     isFarword=true; 
    } 
    if(GUI.RepeatButton(new Rect(850,100,80,70),"second")) 
    { 
     isBackword=true; 
    } 
} 
+0

이 코드가 잘못되었다고 생각하지 않습니다. – Joetjah

+0

어디에서 문자를 만듭니 까? 인스턴스 생성을 사용합니까? 또는 편집기에서 끌어서 놓기 만하면됩니다. 인스턴스화하는 경우 일반 인스턴스 대신 네트워크 인스턴스를 사용하십시오. 샘플 사용 (C#에서 있지만 번역하기가 어렵지 않음) http://pastebin.com/3kVAygHs –

답변

0

문제는 아마도 .. 선수를 만들 수

를 사용하여 네트워크 이벤트, 예를 들면 ..

Network.OnPlayerConnected는, 어디 네트워크해야합니다. 클라이언트의 플레이어를 인스턴스화하고 Network.OnServerInitialized에서 Network.Instantiate 서버의 플레이어해야합니다. 이렇게하면 각각이 소유자가됩니다.

또한 네트워크 게임에는 생각할 수있는 정신적 논리가 있습니다. NetworkView.isMine을 사용하여 누가 개체의 소유자인지, 누가 그렇지 않은지 결정합니다. 소유자 만이 물체를 움직일 수 있다고 가정하고, 다른 플레이어는 좌표를 듣고 있습니다.

Goodluck!