Unet用代码实现 自动加入/创建主机

本文介绍如何在Unity中通过自定义脚本NetworkManagerCustom和NetworkDiscoveryCustom替代默认的Unet UI,实现更美观的游戏网络功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家刚学Unet的时候应该都会接触到Network Manager HUD这个组件:
这是Unet默认的UI,允许你选择 成为主机 或者 成为客户端加入主机。但是如果你这个游戏想做得认真一点,那么用这个默认的UI显然不太合适,显得很简陋。

其实Unity也提供了相关的API,来让你用代码实现用Network Manager HUD可以做到的所有事情

首先第一步你需要新建一个空物体,然后给这个空物体改名为Unet,并给Unet加上两个脚本:NetworkManagerCustom,NetworkDiscoveryCustom。在Unity里面,一个脚本实际上就是一个类。这两个类(或者说是脚本)分别继承自NetworkManager和NetworkDiscovery。这样方便我们使用两个父类的一些方法和属性来实现我们的功能。
别忘了把Offline Scene和Online Scene配置好,这样当创建主机或者加入主机的时候才可以切换到相应的场景(不过不知道可不可以让Online Scene不止一个,过几天我查一下官方文档) 
NetworkManagerCustom的代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class NetworkManagerCustom : NetworkManager
{
    NetworkDiscoveryCustom discovery;
    void Start()
    {
        discovery = GetComponent<NetworkDiscoveryCustom>();
        StartCoroutine(DiscoverNetwork());
    }

    public IEnumerator DiscoverNetwork()
    {
        //监听其它的服务器  

        discovery.Initialize();
        discovery.StartAsClient();

        //等待2秒,等监听结果  
        yield return new WaitForSeconds(2f);

        //没有找到局域网服务器就建立服务器  
        if (discovery.running)
        {
            discovery.StopBroadcast();
            discovery.StartAsServer();
            StartHost();
        }
    }
}

NetworkDiscoveryCustom的代码如下:

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

public class NetworkDiscoveryCustom : NetworkDiscovery
{
    public override void OnReceivedBroadcast(string fromAddress, string data)
    {
        StopBroadcast();
        NetworkManagerCustom.singleton.networkAddress = fromAddress;             //注意singleton不能省略,原因我也不知道 = =
        NetworkManagerCustom.singleton.StartClient();
    }
}

参考资料: Unet局域网框架              以及   官方文档关于NetworkDiscovery和NetworkManager的说明
如果你们看上面的代码发现有不熟悉的方法,可以去官方文档看下相应的API,或者留言
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值