您的位置:首页 > 编程语言

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

2018-03-26 20:17 323 查看
大家刚学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,或者留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐