前言:刚刚学习了一个关于多人网络的一个小demo,主要是学习UNet(Unity Network),趁热打铁
参考文章:
Unity 官方学习手册:https://unity3d.com/cn/learn/tutorials/s/multiplayer-networking?_ga=2.167842657.1937272836.1515592728-1031503227.1515592728
使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五):http://blog.csdn.net/cocos2der/article/details/51006463;
使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六):http://blog.csdn.net/cocos2der/article/details/51007512;
使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七):http://blog.csdn.net/cocos2der/article/details/51008073
1.认识Network组件
(1)NetworkManager组件:管理游戏的网络状态
(2)Network Manager HUD组件:跟Network Manager一起工作,提供一个简单的用户接口(UI)控制游戏运行时游戏的网络状态
<1>运行时,Network Manager HUD在游戏视图中的画面,LAN Host(连接服务器)、LAN Client(连接客户端)
<2>点击LAN Host之后,NetworkManagerHUD发生改变控制去显示活动的服务器,点击Stop,游戏将会离线,当有人连接到服务器之后,再有人在另一个程序上点击LAN Client,则会作为客户端去连接服务器
(3)Network Identity:用于在网络中标识对象,使网络系统认识它
(4)把预设体注册到Network Manager中,通过预设体卵生新的游戏对象注入在场景中
(5)Network Transform组件:同步在客户端和服务器中的Transform
(6)Network Start Position组件:用来设定开始的位置
2.创建脚本
<1>PlayerController
1)using UnityEngine.Networking;
类:NetworkBehaviour、NetworkServer、NetworkStartPosition
1.1)脚本取消继承MonoBehaviour类,继承NetworkBehaviour类
1.2)NetworkBehaviour类
1.2.1)是否是本地玩家:IsLocalPlayer
1.2.5)系统的回调方法,在开始本地游戏的时候调用:OnStartLocalPlayer()
1.2.7)[Command]
使用[]括起来的是特性
在客户端调用Cmd开头字母名字的方法,在服务器执行该方法,叫做远程调用,
使用该特性修饰的方法,方法名字必须以Cmd开头
1.2.8)是否在服务器中:IsServer
1.2.9)查找挂载脚本对象身上的类型:FindObjectOfType<类型>();
1.2.10)系统的回掉调方法,当对象在服务器中生成或是服务器启动时,对场景中的对象调用此方法:OnStartServer()
1.2.11) [ClientRpc]
在服务器调用Rpc开头字母名字的方法,在客户端执行该方法,叫做远程调用。
使用该特性修饰的方法,方面名字必须以Rpc开头
1.3)NetworkServer类
1.3.1)卵生对象在所有已经准备好的客户端中:类名.Spawn(对象);
在服务器调用此卵生子弹的方法,在客户端执行(卵生子弹)
<2>Health
<3>Bullet
<4>EnemySpawner
<5>Billboard
3.场景中的对象:网络管理员、敌人卵生位置
<1>Network Manager(网络管理员)
<2>Enemy Spawner
<3>Spawn Position1
4.工程中的资源:材质、预设体、场景、脚本
<1>材质:黑、白
<2>预设体:
1)Player:PlayerController脚本、Health脚本、Network Identity组件、Network Transform组件
2)Enemy:Network Identity组件、Network Transform组件、Health脚本
3)Bullet:Rigidbody组件、Network Identity组件、Network Transform组件、Bullet脚本
<3>场景:主场景
<4>脚本:前面有代码贴图,以及内容整合
最后:由于是前几天的状态不佳,所以花费今天一天的时间整理,可能也记得不是很清晰了,但还是要去整理