微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity - 添加 Buffs 并将其分配给 UI,重复 for 循环进行分配

如何解决Unity - 添加 Buffs 并将其分配给 UI,重复 for 循环进行分配

我正在尝试实现一个增益功能,如果角色获得增益/减益,它将显示在 UI 面板上。

到目前为止,这就是我所做的,我首先创建了多个 UI 图像作为插槽,然后将此脚本附加到它:

 public class BuffSlot : MonoBehavIoUr
{
    [Serializefield] Image image;

    protected virtual void OnValidate()
    {
        //Get the reference to image component from the BuffSlot gameobject
        if (image == null)
            image = GetComponent<Image>();
    }

    protected Effects _effect;
    public Effects Effect
    {
        get { return _effect; }
        set
        {
            _effect = value;

            if (_effect == null)
            {
                image.sprite = null;

            }
            else
            {
                image.sprite = _effect.Icon;
            }
        }
    }


}

然后我有用于增益/减益效果的脚本对象类

public class Effects : ScriptableObject
{
    [Serializefield] string id;
    public string ID { get { return id; } }
    public string EffectName;
    public EffectType EffectType;
    public Sprite Icon;
    public string EffectDesc;
    public float duration;

    private void OnValidate()
    {
        string path = AssetDatabase.GetAssetPath(this);
        id = AssetDatabase.AssetPathToGUID(path);

    }

    //gets the copy of the item
    public virtual Effects Getcopy()
    {
        return this;
    }
}

public enum EffectType{
    None,Buff,Debuff
}

最后,我有一个 EffectManager 类,用于添加效果等:

public class EffectManager : MonoBehavIoUr
{
    public List<BuffSlot> buffSlots;    
    public void AddEffect(Effects effect)
    {
        for (int i = 0; i < buffSlots.Count; i++)
        {
            if (buffSlots[i].Effect == null)
            {
                buffSlots[i].Effect = effect;
                Debug.Log("Effect Added ");
                return;
            }
            else
            {
                Debug.Log(buffSlots[i].ToString() + " is Full ");
            }
        }
    }    
}

我完成了一半工作,我可以调用 AddEffect() 方法,它会填满我的 UI,直到它到达插槽计数的末尾,然后停止添加。但是,我希望它在已满后将效果重新分配给最旧的索引。

举个例子,假设我的 buffSlots 已满,它有 3 个效果

  • 索引 0 有 hp 减益效果
  • 索引 1 具有 hp 增益效果
  • 索引 2 没有任何作用

完成后,我希望我的代码转到最旧的效果,并在玩家再次获得增益/减益效果时重新分配一个效果。因此,由于我的插槽已满,如果我偶然发现一个 buff,它将使用新 buff 重新分配索引 0,如果我获得另一个 buff,它将转到索引 1,因为我们之前使用了索引 0。等等。

我希望我解释得正确。但这就是我试图在我的 AddEffect 方法中弄清楚的。另外,如果有关于改进我的代码的一些建议,我也会很感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。