C# 如何创建依赖于检查器中设置的变量的检查器元素?
我试图设置简单的检查器控件来调整max、min和current变量,但我很难弄清楚如何防止max值设置在min以下,或者如何防止current值设置在min-max范围之外。我尝试将变量设置为C# 如何创建依赖于检查器中设置的变量的检查器元素?,c#,unity3d,C#,Unity3d,我试图设置简单的检查器控件来调整max、min和current变量,但我很难弄清楚如何防止max值设置在min以下,或者如何防止current值设置在min-max范围之外。我尝试将变量设置为static,以消除“对象引用未设置为对象实例”的问题,但这只会将错误替换为新错误:“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式”。以下是我的代码: using System.Collections; using System.Collections.Generic; usi
static
,以消除“对象引用未设置为对象实例”的问题,但这只会将错误替换为新错误:“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式”。以下是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "NewOptic", menuName = "ScriptableObjects/Optic", order = 1)]
public class Optics : ScriptableObject
{
[Min(0)]
public float minFOV;
[Min(minFOV)]
public float maxFOV;
[Range(minFOV, maxFOV)]
public float currentFOV;
}
您可以使用3种不同的方法来实现: 1.使用常量,而不是静态变量
public class Optics : ScriptableObject
{
public const float minFOV = 0;
[Min(minFOV)]//this Min() doesn't really makes sense now, but anyway
public const float maxFOV = 5;
[Range(minFOV, maxFOV)]
public float currentFOV;
}
2.使用属性查看运行时的错误:
public class Optics : ScriptableObject
{
public const float minFOV = 0;
public const float maxFOV = 5;
[Range(minFOV, maxFOV)]
private float _currentFOV;
public float currentFOV
{
get => _currentFOV;
set
{
if (value > maxFOV || value < minFOV)
Debug.Log("ERROR");
else
_currentFOV = value;
}
}
}
公共类光学器件:ScriptableObject
{
公共常数浮点最小值=0;
公共常数浮点maxFOV=5;
[范围(最小视野、最大视野)]
私人浮动_currentFOV;
公众视野
{
get=>\u currentFOV;
设置
{
如果(值>最大FOV | |值<最小FOV)
Debug.Log(“错误”);
其他的
_currentFOV=值;
}
}
}
3.伊曼纽尔的想法非常正确,除了一件事,你不需要
单一行为
,因为脚本对象
也有OnValidate
方法。用于验证对象的状态。简单回答:你不能,除非为此实现自定义的编辑器
或属性
抽屉。您可以使用或其他类似的实现。。。