c# - 从 OnValidate 获取更改后的值
问题描述
假设我有一个包含多个变量的类,我想通过 OnValidate 检查,每次通过 Unity Inspector 更改一个变量时检查所述类中的每个变量似乎没有多大意义。那么有没有办法只检查已更改的变量?
[System.Serializable]
public class Stat
{
[SerializeField]
private float _value;
Value { get; set; }
}
public class TestClass : MonoBehaviour
{
public Stat stat1;
public Stat stat2;
public Stat stat3;
void Start(){}
private void OnValidate()
{
if (stat1.Value < 0)
{
throw new ArgumentException("Error with stat1");
}
else if (stat2.Value < 0)
{
throw new ArgumentException("Error with stat2");
}
else if (stat3.Value < 0)
{
throw new ArgumentException("Error with stat3");
}
}
}
所以在这种情况下,每次我在 Unity Inspector 中更改 stat1、stat2 或 stat3。OnValidate 将检查每个看起来效率不高的变量。我想知道是否有办法只获取已更改的值,以便我的代码看起来像这样:
public class TestClass : MonoBehaviour
{
public Stat stat1;
public Stat stat2;
public Stat stat3;
void Start(){}
private void OnValidate()
{
if (value < 0) // value being the value that was changed
{
throw new ArgumentException("Error with {value}");
}
}
}
这应该不太相关,但如果有人想知道为什么我有一个 Stat 类,我正在关注一个关于创建具有 SerializeField 的字符统计的教程。
编辑:添加了代码示例以进行说明
解决方案
推荐阅读
- ios - 创建使用客户端证书的 iOS 12 NWConnection
- c++ - 修复删除 #include windows.h 和相关函数调用后的编译器错误
- c# - 自定义 TimePickerRenderer 未触发事件以更新 TimeProperty
- python - 是否可以使用 Python 将图像复制到 Windows 剪贴板而不丢失其透明度?
- bash - 如何将提取的子字符串分配给bash中的变量?
- firebase - Firebase Cloud Firestore 快照听得太快
- c# - 移至 Windows 10 后,Window.xaml“无法在设计视图中编辑”
- codenameone - 我可以使用代号 one 相机套件库从代码中自动拍照吗?
- ios - 在应用程序启动时预加载 ViewController
- elasticsearch - 使用查询将 Elasticsearch 索引中两个字段的值总和作为单个字段