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.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,或者留言
这是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,或者留言
相关文章推荐
- 利用动态创建层技术实现无冗余代码为表单自动添加错误提示
- Python实现Linux主机自动创建互信
- JS封装的自动创建表格的实现代码
- 用Eclipse新版本新建servlet时候,发现创建Servlet后,Eclipse不会自动在web.xml中生成该Servlet对应的mapping信息,而是在Servlet代码中加入注解@Web
- 利用动态创建层技术实现无冗余代码为表单自动添加错误提示
- IOS 使用代码创建约束,实现自动布局
- C#自动创建数据库实现代码
- 用Eclipse新版本新建servlet时候,发现创建Servlet后,Eclipse不会自动在web.xml中生成该Servlet对应的mapping信息,而是在Servlet代码中加入注解@Web
- JS实现复制网页内容自动加入版权内容代码和原文链接
- 豆瓣机器人 自动加入/退出小组、自动在小组发帖/删帖、自动回复 Python实现代码 豆瓣爬虫
- SSM框架——使用MyBatis Generator自动创建代码
- Oracle 表创建序列-触发 实现表ID自动增长
- Java实现文件自动打包成zip并下载的代码
- 实现SQL intellisense,sql代码自动填充----转载
- Ubuntu Server 中实现自动部署提交到SVN的代码
- 简单代码autocomplete="off"实现禁用input输入框的自动提示功能
- 一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户
- Eclipse下配置Perl开发环境并实现代码自动补全
- SSM框架——使用MyBatis Generator自动创建代码
- sublime代码自动提示插件及项目创建