Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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# 在Unity中,如何使公共浮点或int变量不能由用户进行负输入_C#_Unity3d - Fatal编程技术网

C# 在Unity中,如何使公共浮点或int变量不能由用户进行负输入

C# 在Unity中,如何使公共浮点或int变量不能由用户进行负输入,c#,unity3d,C#,Unity3d,我目前正在将一些资产放入Unity Asset store的过程中,因为我正在查看用户为公共变量输入所做的错误。其中之一是他们能够选择相机的宽度和高度,我不想让他们选择输入负数。我能找到的最接近的东西是[Range(x,y)],但这会将我在inspector中的变量输入更改为我不想要的滑块 我知道我总是可以通过代码检查它是否为负数,然后通过调试告诉用户,但我觉得如果我不让用户在第一个位置放置负数,这将节省检查和更少的代码 有人有什么想法吗?或者我基本上一直在检查并通过调试让他们知道吗?看看这里:

我目前正在将一些资产放入Unity Asset store的过程中,因为我正在查看用户为公共变量输入所做的错误。其中之一是他们能够选择相机的宽度和高度,我不想让他们选择输入负数。我能找到的最接近的东西是[Range(x,y)],但这会将我在inspector中的变量输入更改为我不想要的滑块

我知道我总是可以通过代码检查它是否为负数,然后通过调试告诉用户,但我觉得如果我不让用户在第一个位置放置负数,这将节省检查和更少的代码

有人有什么想法吗?或者我基本上一直在检查并通过调试让他们知道吗?

看看这里:

实现该接口,然后在OnAfterDeserialize函数中执行以下操作:

    public void OnAfterDeserialize()
    {
        cameraWidth = Mathf.Clamp(cameraWidth, 0, 99999);
    }

或者,将夹具放入更新循环并添加[ExecuteInEditMode]。但这不是一个好的解决方案。

您可以声明您的数据类型为“uint”,该类型是32位无符号整数类型,范围为0至4294967295。这不会取负值


对于float,很抱歉没有类似于uint的东西,它接受无符号值。您必须从用户处获取uint值并键入cast to float,或者必须创建一个函数来检查用户是否键入了负值并显示错误。可能还有其他解决方案,我不知道,您必须继续寻找它。

OnValidate
是为此目的创建的单行为函数。正如所说:“这可以用来确保在编辑器中修改数据时,数据保持在一定范围内。”在脚本中,编写

OnValidate()
{
    theValue = Mathf.Clamp(theValue, 0, float.MaxValue); // or int.MaxValue, if you need to use an int but can't use uint.
}
我用这个:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptName : MonoBehaviour {
    //Variables

    public float floatName = 0;

    void OnDrawGizmosSelected () {
        if (floatName < 0) {
            floatName = 0;
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类ScriptName:MonoBehavior{
//变数
公共浮点数floatName=0;
void ondrawgizmoss已选(){
if(floatName<0){
floatName=0;
}
}
}

@Joey的答案实际上要好得多。我甚至都不知道这是真的。谢谢你,波乔。@Joey,我觉得这是相当新的。大多数人可能不知道这件事。