如何解决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 个效果。
完成后,我希望我的代码转到最旧的效果,并在玩家再次获得增益/减益效果时重新分配一个新效果。因此,由于我的插槽已满,如果我偶然发现一个 buff,它将使用新 buff 重新分配索引 0,如果我获得另一个 buff,它将转到索引 1,因为我们之前使用了索引 0。等等。
我希望我解释得正确。但这就是我试图在我的 AddEffect 方法中弄清楚的。另外,如果有关于改进我的代码的一些建议,我也会很感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。