开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:600

当前位置:游戏蛮牛 技术专区 教程分享

查看: 327|回复: 1

[自学总结] 事件执行 之 角色死亡

[复制链接]  [移动端链接]
4四处流浪
497/500
排名
5948
昨日变化
12

10

主题

106

帖子

497

积分

Rank: 4

UID
152229
好友
0
蛮牛币
1853
威望
0
注册时间
2016-6-16
在线时间
195 小时
最后登录
2017-3-28
发表于 2016-12-20 10:37:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
一般在游戏里总有玩家,敌人,物品,都会有死亡或者是消失的控制,我一般采用的是HP来控制他们的死亡或者消失
以前一直采用Update的方法实时检测HP的值判断是否该死亡或者消失,现在用类继承事件来控制
定义一个角色类
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;

public class RoleInfo : MonoBehaviour
{
    //@brief 所有角色的死亡注册这个事件即可
    public delegate void DeadHandler(); 
    public event DeadHandler Dead;
    //@brief 血量
    private int hp = 100;
    //brief 角色只死亡一次
    public bool isLive = true;
    public int HP
    {
        get
        {
            if (hp <= 0 && isLive)
            {
                Dead();
                isLive = false;
                return 0;
            }
            return hp;
        }

        set { hp = hp <= 0 ? 0 : value; }
    }
}

现在就来测试一下这个类
定义一个玩家类,继承RoleInfo
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;

public class Player : RoleInfo
{
    //brief 模拟角色血量减少
    private float time = 0;
    //brief 角色的最大生命值
    public int MaxHP = 300;

    void Awake()
    {
        //给角色的生命值赋值
        HP = MaxHP;
    }
    void Start()
    {
        //注册当血量小于等于0时,角色死亡的方法
        Dead += Player_Dead;
    }
    /// <summary>
    /// 角色死亡的方法
    /// </summary>
    private void Player_Dead()
    {
        //执行死亡动画
        //执行死亡音效等
        Debug.Log(gameObject.name + "已经死亡");
    }

    void Update()
    {
        //模拟角色血量减少
        time += Time.deltaTime;
        if (time >= 0.1f)
        {
            time = 0;
            Debug.Log("HP:" + HP);
            HP-=5;
        }
    }

    void OnDisable()
    {
        //有注册方法,就有取消注册方法
        Dead -= Player_Dead;
    }
}


还可以定义一个敌人类,也继承RoleInfo
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;

public class Emeny01 : RoleInfo
{
    //brief 模拟角色血量减少
    private float time = 0;
    //brief 角色的最大生命值
    public int MaxHP = 300;

    void Awake()
    {
        //给角色的生命值赋值
        HP = MaxHP;
    }
    void Start()
    {
        //注册当血量小于等于0时,角色死亡的方法
        Dead += Player_Dead;
    }
    /// <summary>
    /// 角色死亡的方法
    /// </summary>
    private void Player_Dead()
    {
        //执行死亡动画
        //执行死亡音效等
        Debug.Log(gameObject.name + "已经死亡");
    }

    void Update()
    {
        //模拟角色血量减少
        time += Time.deltaTime;
        if (time >= 0.1f)
        {
            time = 0;
            Debug.Log("HP:" + HP);
            HP-=5;
        }
    }

    void OnDisable()
    {
        //有注册方法,就有取消注册方法
        Dead -= Player_Dead;
    }
}


这里还可以定义很多个敌人或者玩家都继承RoleInfo,只要注册死亡方法,而且每个类里的除了自己死亡时执行的信息不同,其它的都可以复用
下面就可以将脚本挂在物体上进行测试
QQ图片20161220103724.png


回复

使用道具 举报

4四处流浪
486/500
排名
7983
昨日变化
14

2

主题

289

帖子

486

积分

Rank: 4

UID
187912
好友
2
蛮牛币
68
威望
0
注册时间
2016-11-29
在线时间
105 小时
最后登录
2017-3-9
QQ
发表于 2016-12-20 11:56:51 | 显示全部楼层
很好的帖子,感谢楼主的分享

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表