【发布时间】:2021-05-18 00:36:40
【问题描述】:
由于目前尚不支持在 Unity 中序列化 C# 的 ObservableCollection,因此我正在使用扩展 List<> 的脚本并创建一个名为 ObservableList 的可序列化类,如本统一论坛答案 ObservableList 中所述.以下是相同的代码:
[Serializable]
public class ObservedList<T> : List<T>
{
public event Action<int> Changed = delegate { };
public event Action Updated = delegate { };
public new void Add(T item)
{
base.Add(item);
Updated();
}
public new void Remove(T item)
{
base.Remove(item);
Updated();
}
public new void AddRange(IEnumerable<T> collection)
{
base.AddRange(collection);
Updated();
}
public new void RemoveRange(int index, int count)
{
base.RemoveRange(index, count);
Updated();
}
public new void Clear()
{
base.Clear();
Updated();
}
public new void Insert(int index, T item)
{
base.Insert(index, item);
Updated();
}
public new void InsertRange(int index, IEnumerable<T> collection)
{
base.InsertRange(index, collection);
Updated();
}
public new void RemoveAll(Predicate<T> match)
{
base.RemoveAll(match);
Updated();
}
public new T this[int index]
{
get
{
return base[index];
}
set
{
base[index] = value;
Changed(index);
}
}
}
它仍然没有被序列化,我在 Unity 编辑器中看不到它。任何帮助将不胜感激!
编辑#1
预期用例:
public class Initialize : MonoBehaviour
{
public ObservedList<int> percentageSlider = new ObservedList<int>();
void Start()
{
percentageSlider.Changed += ValueUpdateHandler;
}
void Update()
{
}
private void ValueUpdateHandler(int index)
{
// Some index specific action
Debug.Log($"{index} was updated");
}
}
我将此脚本作为组件附加到游戏对象,以便我可以输入此列表的 size,使用这些值(就像我可以使用 List 一样)并执行一些只能获取的操作当ObservableList 中的某些值更新时触发。
我想看什么
我所看到的
【问题讨论】:
-
你能告诉我们你是如何使用它的吗?我的意思是你期望丢失的类会出现在检查器中
-
@derHugo 我已编辑问题以包含代码 sn-p。也许这有助于解释用例
-
您的意思是您添加的屏幕截图是应该发生的事情吧?您目前只看到
Percentage Slider而看不到子属性,对吗? -
@derHugo 截图是应该发生的。但我什么也没看到。我添加了另一个外观快照