繁体   English   中英

有没有一种方法可以将随机值添加到此类中?

[英]Is there a way to get a random value into this class?

注意:对模糊的标题感到抱歉,我真的不知道如何命名,主要是因为我不知道它是什么样的问题。

编辑:我知道我可以通过简单地使用一个结构并覆盖一些运算符来做到这一点,但是整个要点是使它在使用和功能上都尽可能接近实际的float,除非这样做会更加困难访问它并更改它,如果不可能的话,我可以处理。

我正在尝试创建一种可以抵消真实价值的安全价值类型,我需要这样做,以便至少可以使用作弊引擎或其他任何东西并将其更改为他们想要的东西,从而至少部分保护它们免受人们的侵害,有没有办法获得随机数是否会在偏移时不会导致值溢出?

这是我的代码:

public class safeFloat {
    private float val;
    //private int offset = Random.Range(-1000, 1000);

    public float Val
    {
        get
        {
            return val; //- offset;
        }
        set
        {
            val = value; //+ offset;
        }
    }

    public static implicit operator safeFloat(float value)
    {
        return new safeFloat(){Val = value};
    }

    public static implicit operator float(safeFloat x)
    {
        return x.Val;
    }
}

显然,目前它什么也不做,不起作用的代码部分已被注释掉,我不知道我不能那样简单地做。 如果什么都没有注释,尝试创建safeFloat并为其分配一些值,这将是我得到的错误:

ArgumentException: RandomRangeInt can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function. UnityEngine.Random.Range (Int32 min, Int32 max)

由于团结建议使用Awake()或Start(),这不是一个选择,因为这只是一个“辅助”类,因此我不会在游戏中放置对象,因此我能做些什么吗?

这个问题与主要主题不太相关:我从来没有尝试过以不同的方式编写代码,所以我什至不知道它是否行得通,如果我的逻辑中存在缺陷,能否请您指出?

试试这个(实际上我已经测试过了,它可以工作)。

这种方法的原因是您试图在构造函数中初始化偏移量。 要解决此问题,请使用此方法。

public class safeFloat 
{
    private float val;
    private int offset;

    private bool offsetSet = false;

    public float Val
    {
        get
        {
            if(!offsetSet)
                offset = Random.Range(-1000, 1000);                
            offsetSet = true;

            return val - offset;
        }
        set
        {
            if(!offsetSet)
                offset = Random.Range(-1000, 1000);                
            offsetSet = true;

            val = value + offset;
        }
    }

    public static implicit operator safeFloat(float value)
    {
        return new safeFloat(){Val = value};
    }

    public static implicit operator float(safeFloat x)
    {
        return x.Val;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM