c# - 我无法通过代码更改滑块的值
问题描述
这是变量的代码:
public Slider healthSlider;
public Slider thirstSlider;
public Slider hungerSlider;
public float health;
public float hunger;
public float thirst;
这是一个可编写脚本的对象
public Descriptions apple;
我也这样做了:
healthSlider.value = health;
thirstSlider.value = thirst;
hungerSlider.value = hunger;
health = Mathf.Clamp(health, 0f, 100f);
thirst = Mathf.Clamp(thirst, 0f, 100f);
hunger = Mathf.Clamp(hunger, 0f, 100f);
这是我们编辑滑块值的地方:
public void Apple()
{
hunger = apple.hunger + hunger;
thirst = apple.thirst + thirst;
health = apple.health + health;
}
我也试过这个但它没有用:
public void Apple()
{
hunger += apple.hunger;
thirst += apple.thirst;
health += apple.health;
}
我也试过像这样直接访问它,但它不起作用:
hungerSlider.value += 0.1f;
我一直在尝试解决这个问题一段时间,但我无法弄清楚,任何帮助将不胜感激!谢谢!
解决方案
float
是值类型,而不是引用类型!
当你这样做
这是我们编辑滑块值的地方:
public void Apple() { hunger = apple.hunger + hunger; thirst = apple.thirst + thirst; health = apple.health + health; }
->不,不是。您在这里所做的是更新您的本地字段hunger
,thirst
并且health
. 这些只是float
字段,与您的滑块无关。
→ 这不会以任何方式影响滑块,直到您将这些值分配回它们,例如通过
hungerSlider.value = hunger;
还要
我也试过像这样直接访问它,但它不起作用:
hungerSlider.value += 0.1f;
好吧,从您的夹紧中,我假设您的滑块从0
到 ,100
因此变化0.1f
几乎不会引起注意,因为它只是总滑块范围的 1/1000。
它可能应该是类似的东西
public void Apple()
{
hungerSlider.value += apple.hunger;
thirstSlider.value += apple.thirst;
healthSlider.value += apple.health;
}
根本不要使用本地字段来镜像滑块值 - 它们只会引起混淆。除非您对一个值进行大量更改/计算,否则您将在仅存在于该方法内部的局部变量中执行它们,然后一次性将其分配回滑块属性,例如
var hunger = hungerSlider.value;
hunger += apple.hunger;
hunger = Mathf.Clamp(hunger, 0, 100);
hungerSlider.value = hunger;
或者,您可以将本地字段转换为Properties并执行例如
public float Hunger
{
get { return hungerSlider.value; }
set
{
value = Mathf.Clamp(value, 0, 100);
hungerSlider.value = value;
}
}
这意味着每次你访问Hunger
你实际得到的值是hungerSlider.value
. 反之,每次您为您分配一个新值时,Hunger
您实际上首先将其钳位,然后将其分配给hungerSlider.value
.
这样做你现在可以简单地做
public void Apple()
{
Hunger += apple.hunger;
// etc
}
推荐阅读
- r - 在 Rmarkdown 中添加到绘图曲线或直线
- android - 如何在 Android 中以编程方式添加带有 actionLayout 的 menuItem?
- python - Python - 如何使用 MongoDB (pymongo) 和 multiproccesing 而无需“在 fork 之前打开 MongoClient”。问题?
- unity3d - 进入房间的最少玩家数量 PHOTON
- tableau-api - 在 Tableau 中查找过去 29 天的活跃用户数
- linux - 为什么在查看某些文件时,终端输出中会出现“^M”?
- c# - 如何在 ASP.NET Core 3.1 中使用参数进行路由
- python - TypeError:add_info()缺少1个必需的位置参数:Flask中的'writer'
- azure-active-directory - 如何使用 Graph API 获取 SharePoint 用户配置文件
- excel - Excel 2010 显示了一个糟糕的数学结果。有人可以解释我为什么吗?