2 上面的博客讲述了如何建立客户端和服务器,但只能是一对一。
下面以多加一个客户端为例来说。(a, b, c 三个,数据从a向b和c发送。)
a 的工程中 (1) LocalCustomMessages.cs 多加一个Middle
public enum TestMessageID : byte
{
StringMessageID = MessageID.UserMessageIDStart,
Middle,
Max
}
(2)LocalCustomMessages.cs 里面SendMessage给两个分别发
public void SendMessage()
{
// If we are connected to a session, broadcast our head info
if (serverConnection != null && serverConnection.IsConnected())
{
// Create an outgoing network message to contain all the info we want to send
NetworkOutMessage msg = CreateMessage((byte)TestMessageID.StringMessageID);
NetworkOutMessage msgm = CreateMessage((byte)TestMessageID.Middle);
send video
// byte[] currentColorFrameByteArray = LocalCamera.viewTexture.EncodeToJPG();
//
// msg.Write(currentColorFrameByteArray.Length);
// msg.WriteArray(currentColorFrameByteArray, (uint)(currentColorFrameByteArray.Length));
///send there or more clients ---test
AppendVector3(msg, Vector3.one);
// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.
serverConnection.Broadcast(
msg,
MessagePriority.Immediate,
MessageReliability.UnreliableSequenced,
MessageChannel.Avatar);
AppendVector3(msgm, 10*Vector3.one);
// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.
serverConnection.Broadcast(
msgm,
MessagePriority.Immediate,
MessageReliability.UnreliableSequenced,
MessageChannel.Avatar);
}
}
(3)LocalCustomMessagesManager.cs Start里多加一行Middle
private void Start()
{
LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.StringMessageID] = UpdateMessage;
LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.Middle] = UpdateMessage;
// SharingStage should be valid at this point, but we may not be connected.
if (SharingStage.Instance.IsConnected)
{
Connected();
}
else
{
SharingStage.Instance.SharingManagerConnected += Connected;
}
}
b 客户端工程 对应的加 Middle 即可
/// </summary>
public enum TestMessageID : byte
{
StringMessageID = MessageID.UserMessageIDStart,
Middle
Max
}
c 客户端工程
(1)加Middle enum
public enum TestMessageID : byte
{
StringMessageID = MessageID.UserMessageIDStart,
Middle,
Max
}
(2) 把脚本中对应的StringMessageID 修改为Middle即可。
public void SendMessage()
{
// If we are connected to a session, broadcast our head info
if (serverConnection != null && serverConnection.IsConnected())
{
// Create an outgoing network message to contain all the info we want to send
//2 michael
NetworkOutMessage msg = CreateMessage((byte)TestMessageID.Middle);
//NetworkOutMessage msg = CreateMessage((byte)TestMessageID.Middle);
send video
//byte[] currentColorFrameByteArray = cameraView.viewTexture.EncodeToJPG();
//msg.Write(currentColorFrameByteArray.Length);
//msg.WriteArray(currentColorFrameByteArray, (uint)(currentColorFrameByteArray.Length));
// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.
serverConnection.Broadcast(
msg,
MessagePriority.Immediate,
MessageReliability.UnreliableSequenced,
MessageChannel.Avatar);
}
}
private void Start()
{
//1 micheal
//LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.StringMessageID] = UpdateMessage;
LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.Middle] = UpdateMessage;
// SharingStage should be valid at this point, but we may not be connected.
if (SharingStage.Instance.IsConnected)
{
Connected();
}
else
{
SharingStage.Instance.SharingManagerConnected += Connected;
}
}
但有个问题是数据重复发送了,会增加数据传输负荷,应该是A放一次B和C都可以收才合理。目前不知这个问题怎么解决?