必威体育Betway必威体育官网
当前位置:首页 > IT技术

[Unity]BuffDebuffSystem增益减益系统(1)

时间:2019-10-30 00:43:16来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

debuff

BuffControl.cs有update函数不停的判断,调用。

BuffManage.cs里面含有BuffControl.cs判断的函数参数条件,并且可以随时改变,调用参数。

BloodBuff : Buff,public override void BuffFunction函数里面放类型 的函数的判断条件,判断 player_gameObject 的角色属性 是否符合条件,并且 BUFF是否在  player_gameObject 的角色 脚本里面 的List<Buff>,遍历List<Buff> 改变角色属性的函数,使其 BUFF改变角色属性 的函数 仅且执行1次,满足移除BUFF条件 。

或者是 把相关火焰参数的BUFF 放入BuffManage.cs的火焰list中,当火焰参数发生变化,增加或者减少的时候,就调用BuffManage.cs的火焰list遍历一遍,判断 相关的火焰参数的BUFF是否生效。

----------------------------------------------------代码

BuffManage.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BuffManage : MonoBehaviour {

    #region Singleton

    public static BuffManage instance;

    private void Awake()
    {
        instance = this;
    }

    #endregion

    public List<Buff> list_buff = new List<Buff>();

    public void foreachListBuffBool(bool IsEffect)
    {
        for (int i=0; i<list_buff.Count ;i++)
        {
            list_buff[i].isEffect = IsEffect;
        }
    }
}

Buff.cs

using UnityEngine;

//.cs脚本 继承ScriptableObject,才能使得 CreateAssetMenu 生效
[CreateAssetMenu(fileName = "New Buff", menuName = "Buff/Create empty Buff")]
public class Buff : ScriptableObject
{
    public string BuffName;

    public int CharacterDamage;
    public int CharacterArmor;

    public bool isEffect = false;

    public virtual void BuffFunction(GameObject player_gameobject)
    {
        //use the item
        Debug.Log("    BuffFunction:" + BuffName);
    }

    public virtual void EffectBuff(GameObject player_gameobject)
    {
        //use the item
        Debug.Log("    EffectBuff:"+ BuffName);
    }

    public virtual void FailureBuff(GameObject player_gameobject)
    {
        //use the item
        Debug.Log("    FailureBuff:" + BuffName);
    }
    public virtual void Tooltip()
    {
        //tool tip buff
    }
}

BloodBuff.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "New Equipment", menuName = "Buff/Create Buff/BloodBuff")]
public class BloodBuff : Buff
{
    public override void BuffFunction(GameObject player_gameobject)
    {
        base.BuffFunction(player_gameobject);
        Debug.Log("BloodBuff    BuffFunction:" + BuffName);
        if(isEffect == false)
        {
            FailureBuff(player_gameobject);
        }
        
        if (isEffect == true)
        {
            EffectBuff(player_gameobject);
        }
    }

    public override void EffectBuff(GameObject player_gameobject)
    {
        base.EffectBuff(player_gameobject);
        Debug.Log("BloodBuff    EffectBuff:" + BuffName);
    }
    public override void FailureBuff(GameObject player_gameobject)
    {
        base.FailureBuff(player_gameobject);
        Debug.Log("BloodBuff    FailureBuff:" + BuffName);
    }
}

BuffControl.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BuffControl : MonoBehaviour {
    private BuffManage buffManage;
    public GameObject player_gameObject;

	// Use this for initialization
	void Start () {
        buffManage = BuffManage.instance;
    }
	
	// Update is called once per frame
	void Update () {
        ForeachList_Buff();
    }

    private void ForeachList_Buff()
    {
        Buff[] array_buff = buffManage.list_buff.ToArray();

        for (int i=0; i< array_buff.Length ;i++)
        {
            if (player_gameObject != null)
            {
                array_buff[i].BuffFunction(player_gameObject);

            }
        }
    }
}

Buff_Button.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Buff_Button : MonoBehaviour {
    public void Button_EffectBuff()//Trigger buff
    {
        Debug.Log("Button_EffectBuff");
        BuffManage.instance.ForeachListBuffBool(true);
    }

    public void Button_FailureBuff()//Trigger buff
    {
        Debug.Log("Button_FailureBuff");
        BuffManage.instance.ForeachListBuffBool(false);
    }
}

相关资源1,持续时间的BUFF的源码

相关资源:

1.

unity-flexible-buff-system

2.

3.

文章最后发布于: 2018-06-10 20:45:33

相关阅读

Win7升级Win10系统正在获取更新处卡住不动怎么解决

最近有一位朋友反馈,在Win7系统中借助百度直通车来升级Win10系统过程中,出现了些问题,那就是一直卡在正在获取更新,Win7升级Win10系统

学生查分系统怎么做——用易查分三分钟即可完成

查询系统是学校常用的管理系统,利用学生成绩查询系统,学生可以自助查分,及时了解自己的考试成绩。相比公开考试成绩,学生考试查分系统

安装基于dell edge r520等老机器工作站上系统重装办法

最近力哥让我按安装一个服务器,电脑是老式的刀片式服务器,型号真的老,安装配置超级麻烦,使了个好多办法,一直困在无法读取或写入外部hd

解决WIN7 64位系统Msflxgrd.ocx无法注册

自动抄表项目中用到了Msflxgrd.ocx控件,该表格控件使用很方便,并在32位 XP系统下测试通过,但是客户的电脑是64位WIN7,点击对话框无法

一键清理系统垃圾

自己亲手制作一个用来清理电脑系统垃圾的小程序,简单方便好用。新建一个记事本,win10系统的用户可以按照下图找到记事本将以下的代

分享到:

栏目导航

推荐阅读

热门阅读