Unity3d Unity2D:UNET传输层API服务器脚本为';不能正确地发送消息

Unity3d Unity2D:UNET传输层API服务器脚本为';不能正确地发送消息,unity3d,unity3d-unet,Unity3d,Unity3d Unet,我正在YouTube上关注unity multiplayer(UNET),但与视频中的那个家伙相比,我得到了不同的结果。您可以看到,我按照他的教程学习了tea,但是在更新函数中的服务器脚本中,我在switch语句的默认函数中使用了debug.log来告诉我是否收到了无效消息,我收到了无效消息。我认为我的信息并没有被正确地发送出去,尽管我很仔细地遵循了那个家伙的教程!我的服务器脚本中是否缺少某些内容 这是我的代码: 公共类服务器客户端 { 公共int连接ID; 公共字符串播放器名称; } 公共类服

我正在YouTube上关注unity multiplayer(UNET),但与视频中的那个家伙相比,我得到了不同的结果。您可以看到,我按照他的教程学习了tea,但是在更新函数中的服务器脚本中,我在switch语句的默认函数中使用了debug.log来告诉我是否收到了无效消息,我收到了无效消息。我认为我的信息并没有被正确地发送出去,尽管我很仔细地遵循了那个家伙的教程!我的服务器脚本中是否缺少某些内容

这是我的代码:

公共类服务器客户端
{
公共int连接ID;
公共字符串播放器名称;
}
公共类服务器:MonoBehavior{
私有常量int MAX_CONNECTION=4;
专用int端口=8888;
私人int hostId;
私有int-webHostId;
专用可靠通道;
专用信道;
private bool isStarted=false;
私有字节错误;
私有列表客户端=新列表();
私有void Start()
{
NetworkTransport.Init();
ConnectionConfig cc=新的ConnectionConfig();
reliableChannel=cc.AddChannel(QosType.Reliable);
不可靠通道=cc.AddChannel(QosType.Unreliable);
HostTopology topo=新的HostTopology(cc,最大连接);
hostId=NetworkTransport.AddHost(拓扑,端口);//null
Log(“套接字打开。主机ID为:“+hostId”);
webHostId=NetworkTransport.AddWebsocketHost(拓扑,端口,null);/,端口,null
IsStart=true;
}
私有void更新()
{
如果(!isStarted)
返回;
int-recHostId;
int connectionId;
int channelId;
字节[]recBuffer=新字节[1024];
int bufferSize=1024;
int-dataSize;
字节错误;
NetworkEventType recData=NetworkTransport.Receive(out recHostId、out connectionId、out channelId、recBuffer、bufferSize、out dataSize、out error);
交换机(recData){
案例NetworkEventType.ConnectEvent://2
Log(“播放器”+connectionId+“已连接”);
OnConnection(connectionId);
打破
案例NetworkEventType.DataEvent://3
string msg=Encoding.Unicode.GetString(recBuffer,0,dataSize);
//Debug.Log(“播放器”+connectionId+”已发送:“+msg”);
Log(“从“+connectionId+”接收:“+msg”);
字符串[]splitData=msg.Split(“|”);
开关(拆分数据[0])
{
案例“OnNameIs”:
OnNameIs(connectionId,splitData[1]);
打破
违约:
Debug.Log(“无效消息:+msg”);
打破
}
打破
案例NetworkEventType.DisconnectEvent://4
Log(“播放器”+连接ID+“已断开”);
打破
}
}
连接专用空隙(国际cnnId)
{
//这可能会添加第三个玩家
ServerClient c=新的ServerClient();
c、 连接ID=cnnId;
c、 playerName=“TEMP”;
添加(c);
//所以你以后可能想改变这个
字符串msg=“AskName |”+cnnId+“|”;
foreach(客户端中的服务器客户端sc)
msg+=sc.playerName+'%'+sc.connectionId+'|';
msg=msg.Trim(“|”);
发送(消息、可靠频道、cnnId);
}
私有void OnNameIs(int-cnnId,string-playerName)
{
clients.Find(x=>x.connectionId==cnnId.playerName=playerName;
发送(“CNN |”+playerName+“|”+cnnId、reliableChannel、客户端);
}
私有void发送(字符串消息、int channelId、int cnnId)
{
列表c=新列表();
c、 添加(clients.Find(x=>x.connectionId==cnnId));
发送(消息,信道ID,c);
}
私有void发送(字符串消息,int channelId,列表c)
{
Debug.Log(“发送:+消息”);
byte[]msg=Encoding.Unicode.GetBytes(消息);
foreach(c中的服务器客户端sc)
{
NetworkTransport.Send(主机ID,sc.connectionId,channelId,msg,message.Length*sizeof(char),out错误);
}
}
}

以下脚本是我的客户端脚本:

公共类播放器
{
公共字符串播放器名称;
公共游戏对象化身;
公共int连接ID;
}
公共类客户端:MonoBehavior{
私有常量int MAX_CONNECTION=4;
专用int端口=8888;//5701
私人int hostId;
私有int-webHostId;
私有int连接ID;
私密的内部客户ID;
专用可靠通道;
专用信道;
私有浮动连接时间;
私有布尔值已连接=false;
private bool isStarted=false;
私有字节错误;
私人弦乐演奏者姓名;
公共游戏对象播放器;
公共列表玩家=新列表();
公共void Connect()
{
//玩家有名字吗?
//把这部分拿出来
字符串pName=GameObject.Find(“NameInput”).GetComponent().text;
如果(pName==“”){
Log(“必须输入名称”);
返回;
}
playerName=pName;
//
//这是开始功能
NetworkTransport.Init();
ConnectionConfig cc=新的ConnectionConfig();
reliableChannel=cc.AddChannel(QosType.Reliable);
不可靠通道=cc.AddChannel(QosType.Unreliable);
HostTopology topo=新的HostTopology(cc,最大连接);
hostId=NetworkTransport.AddHost(拓扑,0);
//
字节错误;
connectionId=NetworkTransport.Connect(主机ID,“127.0.0.1”,端口,0,输出错误);
Log(“到服务器的连接.ConnectionId:+ConnectionId”);
connectionTime=Time.Time;
断开连接=正确;
}
私有void更新()
{
如果(!未连接)
返回;
int-recHostId;
int connectionId;
int channelId;
字节[]recBuffer=新字节[1024];
int bufferSize=1024;
int-dataSize;
字节错误;
NetworkEventType recData=NetworkTransport.Receive(out recHostId、out connectionId、out channelId、recBuffer、bufferSize、out dataSize、out error);
交换机(recData){
案例NetworkEventType.DataEvent://1
string msg=Encoding.Unicode.GetString(recBuffer,0,dataSize);
Log(“接收:+msg”);