C# Unity服务器初始化失败(LAN)

C# Unity服务器初始化失败(LAN),c#,networking,unity3d,C#,Networking,Unity3d,因此,我正在学习使用Unity建立网络,在阅读了一些文档并查看了一个示例之后,我最终得到了下面的代码。每当我运行程序(使用Build&run)并按下按钮托管服务器时,我都会收到消息“initialization…”,但它从来没有说“server Ready:players connected.”。对我来说,这意味着服务器无法初始化,但我真的不知道。其他东西:即使它说“正在初始化…”,我也可以将鼠标移到其他按钮上并单击它们,这样程序就不会冻结。而且,我第一次运行它时,我必须允许它通过我的防火墙,我

因此,我正在学习使用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等。