Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建依赖于检查器中设置的变量的检查器元素?_C#_Unity3d - Fatal编程技术网

C# 如何创建依赖于检查器中设置的变量的检查器元素?

C# 如何创建依赖于检查器中设置的变量的检查器元素?,c#,unity3d,C#,Unity3d,我试图设置简单的检查器控件来调整max、min和current变量,但我很难弄清楚如何防止max值设置在min以下,或者如何防止current值设置在min-max范围之外。我尝试将变量设置为static,以消除“对象引用未设置为对象实例”的问题,但这只会将错误替换为新错误:“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式”。以下是我的代码: using System.Collections; using System.Collections.Generic; usi

我试图设置简单的检查器控件来调整max、min和current变量,但我很难弄清楚如何防止max值设置在min以下,或者如何防止current值设置在min-max范围之外。我尝试将变量设置为
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
方法。

用于验证对象的状态。简单回答:你不能,除非为此实现自定义的
编辑器
属性
抽屉。您可以使用或其他类似的实现。。。