c# - 如何跟踪调用“OnValidate()”的来源
问题描述
我想要一个脚本有布尔单选按钮,这似乎是OnValidate()
做到这一点的完美方式。但是,我需要跟踪检查器中更改了哪些值并检查标识符,但我找不到跟踪部分的解决方案。我怎么知道OnValidate()
要调用什么值?
解决方案
正如评论中所说,可能不是最“美丽”的解决方案,但我会这样做,例如
// These are the fields in the Inspector
// changing any via the Inspector will Invoke OnValidade
[SerializeField] private bool bool1;
[SerializeField] private bool bool2;
// These are private and will be used to check what was changed
private bool _oldBool1;
private bool _oldBool2;
private void OnValidate()
{
if(bool1 != _oldBool1)
{
// bool1 was changed
if(bool1)
{
// Probably: set all other values to false
}
else
{
// Probably check if all other values are false, if so this may not be false
}
}
if(bool2 != _oldBool2)
{
// bool2 was changed
if(bool2)
{
// Probably: set all other values to false
}
else
{
// Probably check if all other values are false, if so this may not be false
}
}
// Etc
// And finally store the new values
_oldBool1 = bool1;
_oldBool2 = bool2;
// Etc
}
Afaik 通过序列化字段的脚本进行的更改不应调用另一个OnValidate
,只能通过检查器或第一次加载资产时进行更改。
当加载脚本或在检查器中更改值时调用此函数(仅在编辑器中调用)。
当然,您也可以使用列表/数组而不是单个字段
在智能手机上打字,所以现在无法测试,但我希望这个想法很清楚
推荐阅读
- r - 用于评估 R 中交叉和嵌套计数数据的 GLMM 模型中的错误
- java - 编程:将二进制数转换为零所需的最少步骤
- python - 不使用 dest 时,argparse 如何确定参数名称?
- java - 位运算符 | 和+一样吗?
- php - 无法连接到 php 中的 odbc。找不到驱动程序
- javascript - 如何将多个 javascript 文件混淆为一个,并且仍然运行电子
- scala - 将方法参数限制为 Scala 中的特定类型
- python-3.x - HDF5 到 Dask (Python) 过滤多个数据集的有效方法
- java - AndroidManifest 文件的问题
- javascript - 立即调用“then”的 Javascript 承诺