Unity5之Network人物被打掉血功能(二)

接着上一讲的内容来讲,上一讲已经实现了服务器端的掉血功能,那么这一讲自然就要实现所有客户端同步掉血功能了。

其实主要就是同步的功能,一切都在代码里。思路很明显,只要将血量的值同步给客户端就可以了。

代码如图:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Networking;

public class health : NetworkBehaviour {


    public const int maxhealth = 100;

    [SyncVar (hook ="changevalue")]//同步变量,改变currenthealth的值。一直会调用changevalue方法。
    public int currenthealth = maxhealth;

    public Slider healthslider;



    public void Takedamage(int damage)
    {
        if (isServer == false)
        {
            return;
        }

        currenthealth -= damage;
        if (currenthealth<=0)
        {
            currenthealth = 0;
        }

        
    }
    /// <summary>
    /// 该方法里需要定义一个参数,传入的参数就是上面定义的同步的currenthealth的值
    /// </summary>
    /// <param name="healthvalue"></param>
    void changevalue(int healthvalue)
    {
        healthslider.value = healthvalue / (float)maxhealth;
    }
}

这里来解读一下代码里的部分内容,其实整个health里的改动很少。只在血量变量上面添加了一个[syncvar],这个东西的意思是同步变量。它的功能就是可以将currenthealth的值同步到所有客户端。

而其后面的(hook ="changevalue")是为了能够在客户端看到血条在UI上的变化,如果没有(hook ="changevalue")血量一样会同步到所有客户端,但是客户端的UI是看不到变化的。

语法规定有了(hook ="changevalue"),就必须要有个名为changevalue的方法与之对应,而且会一直调用该方法,所有下面代码里有了对应的changevalue方法。

本案例里要求的这个方法,必须有一个参数,而这个参数的传入值就是上面定义的currenthealth。然后在这个方法里把UI变化的方法写进去,这样无论血量如何变化都会同步到所有客户端且对应的UI。

这样就实现了该功能了,效果如下:


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值