Unity3D中Buff系统的开发

Unity3D中Buff系统的开发

最近在做一个策略游戏,开发到buff兵种时想着把他做成一个系统,我的思路是这样的。
先建一个枚举类,区分buff种类

public enum BuffKind{
	ATK,
	DF
} 

当然我只写了几个例子,然后需要新建一个buff类(这里如果你喜欢规范的话,这个可以做成基类)

private int buffID;//这个可以保证相同buff不会叠加
private BuffKind buffKind;
private Enum.Propety propety;//要改变的属性
private float buffValue;//buff给的属性
private float time;//buff时间,这里可以用是否为-1表示是否是光环buff
private Character character//人物基类
protected  void Start()
    {
        character = GetComponent<Character>();
        switch (buffKind)
        {
            case BuffKind.DF:
            	propety=Enum.Propety.DF;
                DFBuff(buffTime,buffValue);
                break;
        }
    }
    
public Buff InitBuff(BuffKind kind,float time,float value,int id)
    {
        buffKind = kind;
        buffTime = time;
        buffValue = value;
        BuffID = id;
        return this;
    }


    private void DFBuff(float time,float value)
    {
        character.ChangePropety(propety,value);//这个是人物基类的一个改变属性的方法
        if (time != -1)
         {
              Invoke("DestroySelf", time);
         }
    }
	
	void OnDestroy()
	{
		 character.ChangePropety(propety,-value);//销毁buff时还原
	}
	
	void DestroySelf
	{
		Destroy(this.gameObject);
	}

最后在你的人物基类里加上一个buff的list和两个方法

	protected List<Buff> buffs;

	public void AddBuff(Buff.BuffKind buffKind,int id,float time,float value)
    {
        if (buffs.Count > 0)
        {
            foreach (Buff buff in buffs)
            {
                if (buff.BuffID == id && buff.buffTime == time && buff != null)
                {
                    return;
                }
            }
        }
        buffs.Add(gameObject.AddComponent<Buff>().InitBuff(buffKind, time, value, id));

    }
     public void RemoveBuff(int id)
    {
        foreach(Buff buff in buffs)
        {
            if (buff.BuffID == id)
            {
                buffs.Remove(buff);
                Destroy(buff);
            }
        }
    }

这样一个简单的buff系统便可以了,你可以做一个buff怪,可以这样。

//进入防范就添加一个buff
protected override void OnTriggerEnter2D(Collider2D collision)
    {
        base.OnTriggerEnter2D(collision);
        if (collision.tag == this.tag)//这里是区别友军与敌军
        {
            collision.GetComponent<Character>().AddBuff(Buff.BuffKind.DF, buffid, -1, 3);
        }
    }
//出范围就除去buff
    protected override void OnTriggerExit2D(Collider2D collision)
    {
        base.OnTriggerExit2D(collision);
        if (collision.tag == this.tag)
        {
            collision.GetComponent<Character>().RemoveBuff(buffid);
        }
    }

当然这个也只能当参考,第一次只能想到这种方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值