我不太清楚为什么,但我无法让这个脚本表现出来。我有一个if语句后跟一个else语句,嵌套在另一个带有自己的else语句的if语句中,并且因为脚本的方式,else语句是触发的,无论我做什么。我已经尝试退出该功能,但它不起作用。我有下面的两个版本的脚本,一个版本使用switch语句,一个版本只使用if / else语句。它们具有一系列相同的功能。
我想要的是,如果cost + memorybar.Value大于100,它会告诉用户,然后关闭切换开关,然后退出该功能。发生了什么,它关闭了切换,然后运行else语句,即使在switch语句中也是如此。现在,切换以某种方式反向运行。我见过类似的问题,但即使是return语句也无法解决这个问题。
cost = 50;
switch (power5.isOn) {
case true:
if (cost + memorybar.value > 100) {
error.text = "Exeeds maximum memory";
power5.isOn = false;
break;
} else {
memorybar.value = memorybar.value + cost;
break;
}
case false:
memorybar.value = memorybar.value + cost;
break;
}
if (power5.isOn == true) {
if (cost + memorybar.value > 100) {
error.text = "Exeeds maximum memory";
power5.isOn = false;
return;
} else
memorybar.value = memorybar.value + cost;
return;
}
else
memorybar.value = memorybar.value - cost;
答案 0 :(得分:1)
您的开关在power5.isOn
上触发,并将其设置为false将导致第二个开关案例也评估为true。使用标准的if语句实现它,它将起作用。
cost = 50;
if (power5.isOn)
{
if (cost + memorybar.value > 100)
{
error.text = "Exeeds maximum memory";
power5.isOn = false;
}
else
{
memorybar.value = memorybar.value + cost;
}
}
else
{
memorybar.value = memorybar.value + cost;
}
答案 1 :(得分:1)
不需要return语句,请使用此代码。
if (power5.isOn)
{
if (cost + memorybar.value > 100)
{
error.text = "Exeeds maximum memory";
power5.isOn = false;
}
else
{
memorybar.value = memorybar.value + cost;
}
}
else
{
memorybar.value = memorybar.value - cost;
}
答案 2 :(得分:0)
对于第一个例子
switch (power5.isOn) {
case true:
if (cost + memorybar.value > 100) {
error.text = "Exeeds maximum memory";
power5.isOn = false;
break;
} else {
memorybar.value = memorybar.value + cost;
break;
}
case false:
memorybar.value = memorybar.value + cost;
break;
}
我已尝试过但未能按如下方式重现您的问题:
bool powered = true;
int cost = 50;
int memorybar = 96;
switch (powered)
{
case true:
if (cost + memorybar > 100)
{
Console.WriteLine("entered A");
powered = false;
break;
}
else
{
Console.WriteLine("entered B");
memorybar = memorybar + cost;
break;
}
case false:
Console.WriteLine("entered C");
memorybar = memorybar + cost;
break;
}
Console.ReadLine();
这打印“输入A”而没有别的。
除非您可以创建一个自包含的示例,否则您似乎更有可能将自己与程序中的其余逻辑混淆。您是否有可能实际调用此代码两次,这是您的问题?通过在输入开关之前输入Debug.Log消息并查看它是否打印两次来确保不是这种情况。
如果没有可重复的例子,我的帮助远不止于此。
答案 3 :(得分:0)
根据您的描述,您似乎在Update()或其他连续调用中运行此代码,发生的情况是,一旦关闭电源,代码仍然在每个周期调用ad。
你应该做的是另一个标志,说明是否应该调用此代码。
e.g。
OnTriggerEnter(Collider other) {
if (other.Tag == "powerTrigger") {
updatePower = true;
}
}
Update(){
if(updatePower){
if (power5.isOn){
if (cost + memorybar.value > 100){
error.text = "Exeeds maximum memory";
power5.isOn = false;
} else{
memorybar.value = memorybar.value + cost;
}
} else{
memorybar.value = memorybar.value - cost;
if(memorybar.cost <= 0){
memomrybar.cost = 0;
updatePower = false;
}
}
}
}