unity官方内置网络unet的实例教程(八)

玩我们制作的这个小游戏的时候,是不是玩家出生甚至死亡都挤在一个地方挺别扭的啊?先来修改下这个问题吧:

我们得利用这个叫NetworkStartPosition的组件,因为它内置有可用于执行处理产生位置的功能。

先创建一个空物体,重命名为:Spawn Position 1,然后重置transform,选中它,在Inspector属性面板添加NetworkStartPosition组件,将它的位置Position调整至 (3, 0, 0)。复制它,将复制体重命名为:Spawn Position 2,将它的位置Position调整至(-3, 0, 0)。



在Hierarchy窗口,选中Network Manager,打开Spawn Info将Player Spawn Method更改为Round Robin



NetworkManager将自动找到NetworkStartPosition组件。 NetworkManager在客户端连接到服务端产生新玩家时使用这些位置。 此选项中两种方法:随机和循环。 顾名思义,随机将使用NetworkSpawnPositions中的一个,循环将循环遍历所有可用的生成位置,然后重用它们。 使用Random,完全有可能两个或多个玩家在同一位置产生,具体取决于连接的客户端数量。使用循环法,只有当客户端比生成位置多的时候,重生点才会被重用。

好了,重新生成游戏,进行联网测试吧。

为了让本实例教程更加完整,下面来设置重生点。创建一个简单的系统,使用Spawn Position 上的NetworkStartPosition组件来构建一个玩家重生的重生点数组。

我们需要创建一个数组,并找到所有带有NetworkStartPosition,将它们添加到数组中,最后使用它们的Transform Position作为重生点。这与网络管理器为起点自动完成的工作原理非常相似,但在这种简单的情况下,我们不会有一个循环解决方案,只是随机的解决方案。

打开Health脚本,编辑以下代码:



保存脚本,回到Unity保存,重新生成游戏,进行联网测试,现在,当游戏开始时,角色被创建在场景中的不同位置。当角色当前的生命值降至零时,会在现有的一个位置随机重生。



总结

这个例子已经涵盖了制作简单的多人网络游戏所需的大部分基本概念和组件,使用了Commands:客户端调用服务端执行 、 Client Rpc服务端调用客户端执行、SyncVar hooks同步变量值变化时调用被Hook的函数、[SyncVar]让变量同步、NetworkIdentity具有网络注册识别、NetworkTransform同步变幻的同步功能、NetworkStartPosition生成位置、NetworkManager网络管理等这些概念。