我们接着上一章,继续将角色的射击行为进行网络化,为了使射击网络化我们得更新 Bullet子弹预制体和脚本。
首先,打开Unity编辑器,找到Bullet子弹预制体,添加 NetworkIdentity 组件 和 NetworkTransform这样使子弹预制具有ID识别和变换信息的传输。见下图
接着,选中Hierarchy窗口中的 NetworkManager ,打开右侧属性面板的 Spawn Info,在 Registered Spawnable Prefabs的下面点击加号,然后将子弹预制体拖进去。见下图蓝色位置。
接下来,更新 PlayerController 脚本的代码,打开它进行编辑,最终的代码如下(动手实践是最好的学习方法,我把代码做成难以复制,仔细看的模式,不知是否可取):
好了,保存脚本,回到Unity保存,重新再生成游戏,进行测试,现在子弹可以同步啦,但是打到另外一个玩家,子弹被它的铁布衫给反弹走了,好吧,接下来我们去掉这一逆天的武功。
注:
在这里简单借鉴下官方介绍[Command]的概念
[Command]属性表示以下函数将被客户端调用,将在服务端上运行。函数中的任何参数都将自动通过Command.Command传递给服务器,只能从本地玩家对象发送命令。在网络游戏中,会在服务端和所有的客户端产生的游戏对象,服务端有专门负责进行管理的底层脚本,当服务端的数据发生变化,就是传输给所有的客户端,它们也随着改变。当客户端发送销毁等指令的时候,服务端也执行这些特殊的方法,并将数据发送给所有的客户端,即便是你刚进入游戏,也能看到所有的变化。
为了去掉玩家的铁布衫,需要给玩家添加下生命值和相关的碰撞检测,让角色具有生死的概念,当然还是比人多了条复活的技能。
首先,我们在Scripts文件夹里面新建一个脚本,重命名