2013-03-13 180 views
0

我已經寫了兩個程序,我希望這兩個在我的Android設備上運行在同一個網絡上,但它是一個簡單的客戶端服務器程序,它將在設備和連接上運行被做......但Unity Master服務器將無法正常運行,並且無法連接兩臺位於同一網絡上的android wifi設備,並且該程序在本地主機上運行良好。 下面是簡單的客戶端服務器code..This代碼運行正常Unity主服務器VS簡單客戶端服務器

var object:Transform; 
static var Isconnected:boolean=false; 
//172.16.11.4 
function Start() 
{ 
Application.runInBackground = true; 
Debug.Log("run in back groud"); 
} 
function Update() 
{ 
if(Isconnected) 
    var temp:Transform; 
    temp=Instantiate(object,transform.position, transform.rotation); 
} 
function OnGUI() 
{ 
if(Network.peerType==NetworkPeerType.Disconnected) 
{ 
    if(GUILayout.Button(" Initlized server")) 
    { 
    var useNat = !Network.HavePublicAddress(); 
    Network.InitializeServer(32,25001,useNat); 
    Debug.Log("Server has been Initlized"); 
    } 
} 
    if(GUILayout.Button("connect to server")) 
    { 
    Network.Connect("172.16.11.4",25001); 
    } 
} 
function OnConnectedToServer() { 
    Debug.Log("Connected to server"); 
    Isconnected=true; 
    // Send local player name to server ... 
} 

不過,雖然在本地主機上的代碼運行,如果我們給這個ip 127.0.0.1

#pragma strict 
private var rotAngle : float = 0; 
private var pivotPoint : Vector2; 
var Gamename:String="MyGame"; 
var refreshing:boolean=false; 
private var hostdata:HostData[]; 

function Start() { 

} 

function Update() { 
var farword=Input.GetKey("up"); 
if(farword==true) 
{ 
//animation.Play("ArmatureAction"); 

} 
transform.Translate(0,0,Input.GetAxis("Vertical")); 
transform.Rotate(0,Input.GetAxis("Horizontal"),0); 
if(refreshing) 
{ 
if(MasterServer.PollHostList().Length>0) 
{ 
refreshing=false; 
hostdata=MasterServer.PollHostList(); 
Debug.Log(MasterServer.PollHostList().Length); 

} 
} 



} 
function startServer() 
{ 
Network.InitializeServer(32,25001,!Network.HavePublicAddress); 
MasterServer.RegisterHost(Gamename,"THis is tutorial","THis is tutorial game"); 
} 
function OnServerInitialized() 
{ 
Debug.Log("Sever is initlized"); 
} 
function OnMasterServerEvent(mgs:MasterServerEvent) 
{ 
if(mgs==MasterServerEvent.RegistrationSucceeded) 
{ 
Debug.Log("Register server"); 
} 



} 
function refreshHostList(){ 
MasterServer.RequestHostList(Gamename); 
    refreshing=true; 

} 







function OnGUI() 
{ 
if((!Network.isClient && !Network.isServer)) 
{ 
if(GUI.Button(Rect(100,100,100,100),"Start Sever")) 
{ 
Debug.Log("Start Server"); 
startServer(); 
} 
if(GUI.Button(Rect(100,220,100,100),"Refresg Hosts")) 
{ 
Debug.Log("Refresh HOsts"); 
refreshHostList(); 
} 

if(hostdata) 
{ 
for(var i:int=0;i<hostdata.length;i++) 
{ 
if(GUI.Button(Rect(230,100,100,100),hostdata[i].gameName)) 
{ 
Network.Connect("172.16.11.4",25001); 
} 
} 
} 
} 
if(GUI.Button(Rect(300,300,100,100),"back")) 
{ 
transform.Translate(9,0,0); 
} 
if(GUI.Button(Rect(300,400,100,100),"farword")) 
{ 
transform.Translate(-9,0,0); 
} 

} 
這個代碼將不能依靠WiFi運行...

任何幫助

回答

0

我認爲在第二個代碼

if(hostdata) 
{ 
for(var i:int=0;i<hostdata.length;i++) 
{ 
    if(GUI.Button(Rect(230,100,100,100),hostdata[i].gameName)) 
    { 
    Network.Connect("172.16.11.4",25001); 
    } 
} 

需要更改

if(hostdata) 
{ 
for(var i:int=0;i<hostdata.length;i++) 
{ 
    if(GUI.Button(Rect(230,100,100,100),hostdata[i].gameName)) 
    { 
    Network.Connect(hostdata[i]); //Or Network.Connect(hostdata[i].ip[ 0 ], hostdata[i].port); 
    } 
} 

而且你的按鈕會覆蓋自己。 (如果超過1個服務器初始化並找到)。您需要創建具有動態起始高度值的Rect。像:

if(hostdata) 
{ 

var y = 100; // or other start y position like 0 
for(var i:int=0;i<hostdata.length;i++) 
{ 

    if(GUI.Button(Rect(230,y,100,100),hostdata[i].gameName)) 
    { 
    Network.Connect(hostdata[i]); //Or Network.Connect(hostdata[i].ip[ 0 ], hostdata[i].port); 
    } 
    y+=100+ 5 //Some padding. 
} 

如果發生任何問題,如無法連接服務器記住NAT穿通通常會導致問題。