C# Unity服务器初始化失败(LAN)
因此,我正在学习使用Unity建立网络,在阅读了一些文档并查看了一个示例之后,我最终得到了下面的代码。每当我运行程序(使用Build&run)并按下按钮托管服务器时,我都会收到消息“initialization…”,但它从来没有说“server Ready:players connected.”。对我来说,这意味着服务器无法初始化,但我真的不知道。其他东西:即使它说“正在初始化…”,我也可以将鼠标移到其他按钮上并单击它们,这样程序就不会冻结。而且,我第一次运行它时,我必须允许它通过我的防火墙,我做到了。我只是想让它在局域网上运行,我不在乎用它在互联网上运行C# Unity服务器初始化失败(LAN),c#,networking,unity3d,C#,Networking,Unity3d,因此,我正在学习使用Unity建立网络,在阅读了一些文档并查看了一个示例之后,我最终得到了下面的代码。每当我运行程序(使用Build&run)并按下按钮托管服务器时,我都会收到消息“initialization…”,但它从来没有说“server Ready:players connected.”。对我来说,这意味着服务器无法初始化,但我真的不知道。其他东西:即使它说“正在初始化…”,我也可以将鼠标移到其他按钮上并单击它们,这样程序就不会冻结。而且,我第一次运行它时,我必须允许它通过我的防火墙,我
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Net;
using System.Net.Sockets;
public class NetworkTestScript : MonoBehaviour
{
private string Address = "127.0.0.1";
private int PlayerCount = 0;
private float NextUpdate = 0.0F;
public NetworkPlayer Player;
public float UpdateInterval = 0.1F;
public GameObject Canvas;
public Text[] Texts;
void Start()
{
Canvas = GameObject.Find("Canvas");
Texts = Canvas.GetComponentsInChildren<Text>();
IPHostEntry Host;
Host = Dns.GetHostEntry(Dns.GetHostName());
foreach(IPAddress IP in Host.AddressList)
{
if(IP.AddressFamily == AddressFamily.InterNetwork)
{
Address = IP.ToString();
}
}
}
void Update()
{
if(Network.isClient && Time.realtimeSinceStartup > NextUpdate)
{
NextUpdate = Time.realtimeSinceStartup + UpdateInterval;
//If there is input, send it in RPC to server, which then sends it as an RPC to other players
}
}
public void StartServer()
{
Network.InitializeServer(2, 25000, false);
Texts[2].text = "Initializing...";
}
public void Connect()
{
Network.Connect(Address, 25000);
Texts[3].text = "Connecting...";
}
void OnConnectedToServer()
{
Texts[3].text = "Connected.";
Debug.Log("Connected to server.");
}
void OnFailedToConnect(NetworkConnectionError Error)
{
Texts[3].text = "Connection failed.";
Debug.Log("Connection failed: " + Error);
}
void OnSeverInitialized()
{
Debug.Log("Server initialized.");
Texts[2].text = "Server Ready: " + PlayerCount + " players connected.";
}
void OnPlayerConnected(NetworkPlayer P)
{
PlayerCount++;
NetworkViewID ViewID = Network.AllocateViewID();
Texts[2].text = "Server Ready: " + PlayerCount + " players connected.";
if(PlayerCount == 2)
{
Texts[2].text = "Players ready. Starting...";
}
Debug.Log("Player " + ViewID.ToString() + " connected from " + P.ipAddress + ":" + P.port);
}
void OnPlayerDisconnected(NetworkPlayer P)
{
PlayerCount--;
Texts[2].text = "Server Ready: " + PlayerCount + " players connected.";
Debug.Log("Player disconnected: " + P.ToString());
//Halt game
}
}
使用UnityEngine;
使用UnityEngine.UI;
使用系统集合;
Net系统;
使用System.Net.Sockets;
公共类NetworkTestScript:MonoBehavior
{
私有字符串地址=“127.0.0.1”;
私有整数PlayerCount=0;
私有浮动NextUpdate=0.0F;
公共网络播放器;
公共浮点更新区间=0.1F;
公共游戏对象画布;
公共文本[]文本;
void Start()
{
Canvas=GameObject.Find(“Canvas”);
text=Canvas.GetComponentsInChildren();
IPHostEntry宿主;
Host=Dns.GetHostEntry(Dns.GetHostName());
foreach(主机地址列表中的IP地址)
{
if(IP.AddressFamily==AddressFamily.InterNetwork)
{
地址=IP.ToString();
}
}
}
无效更新()
{
if(Network.isClient&&Time.realtimesincestart>NextUpdate)
{
NextUpdate=Time.realtimesincestart+UpdateInterval;
//若有输入,则将其以RPC发送到服务器,然后服务器将其作为RPC发送给其他玩家
}
}
public void StartServer()
{
初始化服务器(225000,错误);
text[2]。text=“正在初始化…”;
}
公共void Connect()
{
网络连接(地址:25000);
文本[3]。text=“连接…”;
}
void OnConnectedToServer()
{
text[3]。text=“已连接。”;
Log(“已连接到服务器”);
}
连接失败时无效(网络连接错误)
{
text[3]。text=“连接失败。”;
Log(“连接失败:+错误”);
}
void OnSeverInitialized()
{
Log(“服务器已初始化”);
text[2]。text=“服务器就绪:”+PlayerCount+“玩家已连接。”;
}
无效OnPlayerConnected(网络播放器P)
{
PlayerCount++;
NetworkViewID ViewID=Network.AllocateViewID();
text[2]。text=“服务器就绪:”+PlayerCount+“玩家已连接。”;
如果(PlayerCount==2)
{
text[2].text=“玩家准备好了,开始……”;
}
Debug.Log(“Player”+ViewID.ToString()+”从“+P.ipAddress+”:“+P.port”连接);
}
无效OnPlayerDisconnected(网络播放器P)
{
玩家计数--;
text[2]。text=“服务器就绪:”+PlayerCount+“玩家已连接。”;
Log(“播放器已断开连接:+P.ToString());
//停止游戏
}
}
我有一个在线和局域网多人游戏-和管理器可能对您有用。也许更改更多端口号可以解决问题。我建议给出高于25000的端口号,我通常使用test:27017等。