unity官方教程合集

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

2017-11-08  本文已影响329人  e566c99b4645

本课程的地址:

第一节.www.jianshu.com/p/d4e35e547081

第二节:www.jianshu.com/p/d7481e83317c

第四节:www.jianshu.com/p/5b211f3f4ec6

第五节:www.jianshu.com/p/cb034b4c317d

第七节:www.jianshu.com/p/b8cc2d15e2b5

第八节:www.jianshu.com/p/9f8f18a46266

客户端需要从服务端取得数据来同步角色的生命值和血条状态,这称为:Server Authority(服务器权限)为了实现本例的生命值同步我们需要引入同步变量[SyncVar] 。

打开Health脚本,引入UnityEngine.Networking命名空间,将继承关系改为:NetworkBehaviour,将currentHealth作为[SyncVar],具体脚本如下:


保存脚本。回到Unity保存,重新生成游戏,进行测试,发现还同步还是有问题。现在是该让SyncVar hook出场了,它可以将SyncVar与函数绑定,当SyncVar变化时,绑定的这些函数会在服务端和客户端进行同步。打开Health脚本,创建void OnChangeHealth (int currentHealth)函数,具体代码如下:


health

现在当currentHealth的值发生变化时,OnChangeHealth (int currentHealth)函数将会在服务端和客户端进行更新。

保存脚本,回到Unity,重新生成并运行游戏进行测试。终于实现了生命值和血条的同步。

下面对游戏进行下改进:当角色当前的生命值为为0的时候,什么事情都不会发生,这样可不爽。我们改进角色的生命值为0的时候,它将被传送回到起始位置。这也将引入[ClientRpc],该属性是状态同步的方式之一。它在服务端上被调用,在客户端上执行,与Commands相反。

要将使用ClientRpc的函数调用,需要将“Rpc”添加为函数名的前缀。当在服务器上调用该方法时,此方法将在客户端上运行。它的参数将自动作为ClientRpc调用的一部分传递给客户端。

在Health脚本中创建一个newRespawn函数,并在角色的当前生命值达到0时调用,最终脚本时这样的:

在我们的教程里,客户端控制本地Player 的位置。这是因为Player享有对客户端的本地权限。服务器发送给所有的客户端将Client Player作为ClientRpc调用并移动到开始位置。因为Player具有NetworkTransform组件,所有客户端都会同步此位置。

保存脚本,回到Unity,保存,重新生成,进行测试,当一个角色的生命值为0时,这个角色在0,0,0点重生了,而且是满血。

上一篇 下一篇

猜你喜欢

热点阅读