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.