below is server side performance
public byte[] collectData()
{
byte[] syncbytes;
//if (isSever && isPlaying)
{
players = GameObject.FindGameObjectsWithTag("Player");
enemys = GameObject.FindGameObjectsWithTag("enemy");
// weapon= GameObject.FindGameObjectsWithTag("weapon");
tmpContainer = new GameObject[][] { players, enemys };
int activeGobjnum = players.Length + enemys.Length;
activeObj =new GameObject[activeGobjnum];
// SyncPosition = new Vector3[activeGobjnum];
players.CopyTo(activeObj, 0);
enemys.CopyTo(activeObj, players.Length);
int id;
BaseContol objectstate;
SynchronizationMessage.Clear();
for(int i=0;i<tmpContainer.Length;i++)
{
GameObject[] g = tmpContainer[i];
foreach (GameObject g1 in g)
{
objectstate = g1.GetComponent<BaseContol>();
id = objectstate.NetworkId;
byte FireState = objectstate.bullect;
if (id == -1)
{
enemycounter += 1;
objectstate.NetworkId = enemycounter;
SynchronizationMessage.Add(g1.name+ enemycounter, new Gamobjectsinfo(objectstate.NetworkId, new byte[] { FireState }, g1.transform.position, g1.transform.rotation));
Debug.Log(g1.name+"-counter=" + enemycounter);
}
else
{
SynchronizationMessage.Add(g1.name+id, new Gamobjectsinfo(id, new byte[] { (byte)FireState }, g1.transform.position, g1.transform.rotation));
}
objectstate.bullect = 0;
}
}
}
below is both side initialize setting
void init()
{
if (hostId != -1)
return;
NetworkTransport.Init();
config = new ConnectionConfig();
channelid = config.AddChannel(QosType.ReliableFragmented);
HostTopology topology = new HostTopology(config, 15);
// hostId = NetworkTransport.AddHost(topology);
Debug.Log("hostId1=" + hostId);
hostId = NetworkTransport.AddHost(topology, broadcastPort);
}
receive code is
int outHostId;
int outConnectionId;
int outChannelId;
string outConnIp;
int outPort;
NetworkID outID;
NodeID outNode;
int receivedSize;
byte error;
int quesize;
NetworkEventType evt;
int dog = 0;
do
{
dog++;
buffer = new byte[1024];
evt =
NetworkTransport.Receive(out outHostId, out outConnectionId, out outChannelId, buffer, buffer.Length, out receivedSize, out error);
quesize = NetworkTransport.GetIncomingMessageQueueSize(outHostId, out error);
if (error != 0)
Debug.LogError("Receive error=" + error + "quesize=" + quesize);
switch (evt)
{
case NetworkEventType.ConnectEvent:
{
NetworkTransport.GetConnectionInfo(outHostId, outConnectionId, out outConnIp, out outPort, out outID, out outNode, out error);
connectionClient.Add(outConnectionId, new StrTxt(Instantiate(text), outConnIp, true));
OnConnect(outHostId, outConnectionId, (NetworkError)error);
break;
}
case NetworkEventType.DisconnectEvent:
{
OnDisconnect(outHostId, outConnectionId, (NetworkError)error);
break;
}
case NetworkEventType.DataEvent:
{
OnData(outHostId, outConnectionId, outChannelId, buffer, receivedSize, (NetworkError)error);
break;
}
case NetworkEventType.BroadcastEvent:
{
OnBroadcast(outHostId, buffer, receivedSize, (NetworkError)error);
break;
}
case NetworkEventType.Nothing:
break;
default:
Debug.LogError("Unknown network message type received: " + evt);
break;
}
}
while (dog<30&&quesize!=0);
I test this on wifi.Use a windows device and another is android device.
When I send message over 1024 bytes , receive device’s application will on response
even in editor.Therefore I have to use task manager close unity.
Is anyone know how to solve this?
This cause me use QosType.ReliableSequenced channel.I split large (over 1024 bytes) to chunks.
Combine that at client.But when client receive some times message.It’s no response.
My unity versions is 5.60f3. I use VisualStudio2015,windows10 Os.
Any help here would be greatly appreciated.