Unity的getter setter限制不能用。

问题描述 投票:-1回答:2

我使用gettersetter来限制一个值。这是input.deltaPosition.x,玩家可以旋转星球,但我不想让玩家疯狂地滑动手指,把星球旋转成654654321度。所以我声明了一个变量和gettersetter。但是数值还是取650+的值或者负值。

if(touch.phase == TouchPhase.Moved)
            {                
                TouchX = touch.deltaPosition.x;
                transform.Rotate(0, yMultiplier * TouchX * Time.deltaTime * planetSpeed, 0, Space.World);
}

这就是gettersetter

private float TouchX
    {
        get { return touchX; }
        set
        {
            if (touchX > 10)
                touchX = 10;
            else if (touchX < -10)
                touchX = -10;
            else
                touchX = value;
        }
    }

我做错了什么,还是一个错误?

c# unity3d
2个回答
2
投票

另外你没有检查 value 你已经明白了,其实你的代码可以简化很多,只需使用简单的 Mathf.Clamp

private float TouchX
{
    get { return touchX; }
    set
    {
        touchX = Mathf.Clamp(value, -10, 10);
    }
}

1
投票

@BugFinder说,我检查的是当前的值,而不是新的值,它必须是

private float TouchX
    {
        get { return touchX; }
        set
        {
            if (value > 10)
                touchX = 10;
            else if (value < -10)
                touchX = -10;
            else
                touchX = value;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.