UNet系统初次使用——联网Boxing游戏(2)
来源:互联网 发布:java对象锁和类锁 编辑:程序博客网 时间:2024/05/18 19:46
UNet系统初次使用——联网Boxing游戏(1)
场景和人物模型搭建完毕后,就正式开始搭建网络环境。对于Unet的相关知识网上有很多介绍,在此不多说,列出几个博客可以参考学习。
http://blog.csdn.net/u010019717/article/details/46849341
http://www.cnblogs.com/zhouxin/p/5820161.html
三、 NetworkManager
NetworkManager可以说是整个Unet的核心组件。所有的客户端和服务器,都是通过NetworkManager进行通信。当我们使用Unet制作联网游戏的时候,最先就是给一个对象挂上NetworkManager组件。
(1)
这里是我的NetworkManager组件的参数
基本使用默认的就好
其中Player Prefab是客户端在连入服务器时自动生成的prefab
而Registered Spawnable Prefabs 是在NetworkManager上注册的prefab。
如果是没有注册的prefab则不能在服务器上生成后同步到各个客户端。
(2)
NetworkManagerHUD是一个跟NeworkManager同步使用的组件。
在play模式下会自动生成一个这样的gui,可以简便低开启server或者client或者host。
同时也会显示当前NetworkManager上的信息。
(3)
所有要注册在NetworkManager的prefab都要挂在NetworkIdentity的组件。
每个被NetworkManager生成的gameobject都是通过这个组件与networkManager联系。同时如果要挂载继承的是NetworkBehaviour的代码的时候,相应的gameobject也要有NetworkIdentity组件。
四、Player和场景的加载
(1)NetworkStartPosition
NetworkStartPosition 也是一个Unet的相关组件,给某个gameobject挂载之后,就会将其的Transform信息注册到NetworkManager的StarPosition一个List中。
player就从这些startposition中选一个作为初始transform生成。
(2)加载player
先上一段源代码。前面说过,client在连入server时,如果注册了Player Prefab,则会自动生成一个player gameobject。而这个代码就是server生成player gameobject时调用的。
Transform startPosition = this.GetStartPosition(); GameObject player; if (startPosition != null) { player = Object.Instantiate<GameObject>(this.m_PlayerPrefab, startPosition.get_position(), startPosition.get_rotation()); } else { player = Object.Instantiate<GameObject>(this.m_PlayerPrefab, Vector3.get_zero(), Quaternion.get_identity()); } NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
其中关键的点是
Transform startPosition = this.GetStartPosition();
GetStartporion有两种方式,一个是随机(Random)一个是轮转(Round Robin),可以在NetworkManager中选择。
在这里我们选用Round Robin, 那么会从Startposition的list中按顺序选择位置生成player,设定好startposition就可以在指定位置加载player了。
(3)加载场景
其实我个人认为,这些场景不需要根据服务器加载的,直接在本地的scene中预先设定好就好。不过当时我是通过服务器加载的,也介绍一下这种方法。
public class SceneObjectSpawn : NetworkBehaviour{ public List<GameObject> ServerPrefabs; public override void OnStartServer() { for (int i = 0; i < ServerPrefabs.Count; i++) { GameObject obj = Instantiate(ServerPrefabs[i]) as GameObject; NetworkServer.Spawn(obj); } }}
核心的代码就是这个,在服务器启动的时候,将所有的prefab创建成对应的GameObject然后通过NetworkServer.Spawn(obj);在networkServer上生成,并在所有客户端上生成。
在按下HUD的Lan Host之后,便会生成player和擂台。
- UNet系统初次使用——联网Boxing游戏(2)
- UNet系统初次使用——联网Boxing游戏(1)
- UNet系统初次使用——联网Boxing游戏(3)
- UNet系统初次使用——联网Boxing游戏(4)
- unity之使用unet创建局域网游戏
- Unity3D UNET 模仿局域网游戏(一)
- Unity3D UNET 模仿局域网游戏(二)
- Unity3D UNET 模仿局域网游戏(三)
- C#—装箱(boxing)与拆箱(unboxing)
- Unet在线游戏框架
- Unity模拟弹幕(二)——Unet
- Git 初次使用(2)
- Unity5.1 新的网络引擎UNET(八) UNET 系统概括
- 网络游戏——强联网游戏
- Java游戏服务器成长之路——弱联网游戏篇(源码分析)
- 初次接触OpenCV 笔记(程序综合设计课程——贪吃蛇游戏)
- DB2 CLP——初次使用
- Hololens 使用Unet共享详细教程(一)
- autotools使用
- 大话数据结构学习笔记1
- C++程序编程步骤
- FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具
- C++ new的用法
- UNet系统初次使用——联网Boxing游戏(2)
- python进程池multiprocessing.Pool运行错误:The "freeze_support()" line can be omitted if the program is not g
- POJ 3422 Kaka's Matrix Travels
- Kth Largest Element 解题报告
- 测试用例知识点总结
- .NET WebBrowser不与IE或其他进程共享cookie(WebBrowser独立cookie方法)
- 阿里云线上云服务器(linux)上创建用户并付权限
- 解决 go get 撞墙问题
- Mac 安装 adb (Android调试桥)