统一启动“主机”网络模式的应用

时间:2017-09-14 21:31:07

标签: c# unity3d networking host unet

正在阅读一些教程和统一文档,以了解如何将网络实例作为“主机”启动,但我能够找到的只是如何将系统初始化为客户端或服务器。我在下面添加了将在服务器或客户端模式下启动的代码,但是如何初始化主机模式呢?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class NetworkManager : MonoBehaviour {

    public static NetworkManager Instance = null; // create singleton
    public bool host;
    private int hostPort = 7777;
    private string hostIP = "192.168.1.160";
    string networkConnections;

    private void Awake()
    {
        InitNetworkManager();
    }

    private void Update()
    {
        if (Network.isServer)
        {
            networkConnections = NetworkServer.connections.Count.ToString();
        }
    }

    void InitNetworkManager()
    {
        if (Instance == null)
            Instance = this;
        else if (Instance != null)
            Destroy(gameObject);

        if (host && !Network.isServer)
        {
            // setup server
            LaunchServer();
            return;
        }
        else if (!host && !Network.isClient) 
        {
            // setup client
            LaunchClient();
            return;
        }
    }

    void LaunchServer()
    {
        Network.InitializeServer(32, hostPort, true);
        Debug.Log("Server Launched");
    }

    void LaunchClient()
    {
        Network.Connect(hostIP, hostPort);
        Debug.Log("Client Launched");
    }
}

1 个答案:

答案 0 :(得分:0)

实际上,当你在运行一个播放器时,你是一个普通的玩家。既不是服务器也不是客户。所以你这段代码没有任何意义。

if (host && !Network.isServer)
        {
            // setup server
            LaunchServer();
            return;
        }
        else if (!host && !Network.isClient) 
        {
            // setup client
            LaunchClient();
            return;
        }
  

isServer - 如果对象位于服务器(或主机)上,则为true   催生。

     

isClient - 如果对象位于客户端上,则为true,并由   服务器

相反,您应该为用户提供三个选项

  1. 服务器
  2. 主机(服务器+客户端)
  3. 客户端
  4. 使用GUI按钮或使用任何选项提供这些选项。您可以使用Network Manager启动应用程序的三种模式。

    1. StartHost :这会启动一个网络" host" - 同一应用程序中的服务器和客户端。
    2. StartClient :这会启动网络客户端。它使用networkAddress和networkPort属性作为要连接的地址。
    3. StartServer这会启动一个新服务器。