0

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

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");
    }
}
4

1 回答 1

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. 客户

使用 GUI 按钮或使用任何选项提供这些选项。您可以使用网络管理器启动应用程序的三种模式。

  1. StartHost这将启动一个网络“主机”——同一应用程序中的服务器和客户端。
  2. StartClient这将启动一个网络客户端。它使用 networkAddress 和 networkPort 属性作为要连接的地址。
  3. StartServer 这将启动一个新服务器。
于 2017-09-15T04:58:43.690 回答