更改 C# Unity 函数内 if 语句的条件
Changing the conditions of an if statement inside a function for C# Unity
我正在清理一些代码,更多的是为了改进。我有一个按钮可以打开和关闭一些文本。它的工作原理是使用指针,单击按钮并淡出所有项目,单击的项目除外:
public void OnHideClick()
{
AllText.Remove(this.gameObject);
if (newSwitchOne)
{
for (int i = 0; i < 3; i++)
{
switchOn = true;
}
}
else if (newSwitchTwo)
{
for (int i = 0; i < 3; i++)
{
switchOff = true;
}
}
}
更新根据布尔值的真值运行操作并忽略假值。这很好用。
void Update()
{
if (switchOn)
{
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, 0), 0.0075f * Time.time);
if (TextColor.color.a <= 0.023f)
{
TextColor.color = new Color(255, 255, 255, 0);
if (TextColor.color.a == 0.0f)
{
switchOn = false;
switchOff = false;
newSwitchOne = false;
newSwitchTwo = true;
}
}
}
}
if (switchOff)
{
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, 1), 0.005f * Time.time);
if (TextColor.color.a >= 0.977f)
{
TextColor.color = new Color(255, 255, 255, 1);
if (TextColor.color.a == 1.0f)
{
switchOn = false;
switchOff = false;
newSwitchOne = true;
newSwitchTwo = false;
}
}
}
}
}
我正在尝试清理这段代码。我非常了解函数和 CoRoutines,并且通过看到 if switchOn 和 if switchOff 的类似代码,我想知道我是否可以通过传递一些值作为参数来清理它。我试过这个,但似乎很难处理测试 color.alpha 值的 if 语句的条件,例如:
if (TextColor.color.a >= 0.977f)
我知道 sys.action 但这似乎并不奏效。据我所知,我相信将小于或大于符号“<”、“>”作为参数进行更改
帮助。我做了一些搜索 - 但没有找到太多可以帮助我的东西。也许看错了方向。
有人能帮我解释一下吗?
这行得通吗? 我已尝试确定代码的共性以尝试减少一些重复。
void Update()
{
var color = switchOn ? new Color(255, 255, 255, 0) : new Color(255, 255, 255, 1);
var multiplier = switchOn ? 0.0075f : 0.005f;
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, color, multiplier * Time.time);
if ((switchOn && TextColor.color.a <= 0.023f) || (!switchOn && TextColor.color.a >= 0.977f))
{
TextColor.color = color;
if ()
{
switchOn = false;
switchOff = false;
newSwitchOne = !switchOn;
newSwitchTwo = switchOn;
}
}
}
}
当您想根据 condition/value 创建代码时,使用此表示法可以生成干净灵活的代码:
test ? value1 : value2
如果您不习惯这种表示法,请查看它的工作原理:测试条件,如果为真则使用值 1,否则使用值 2。
例如:
float testVal =
if (TextColor.color.a == (switchOn ? 0.0f : 1.0f))
...
在上面的例子中,我假设你可以单独使用 switchOn(switchOn true > 你的 switchOn,switchOn false > 你的 switchOff)
public void OnHideClick()
{
AllText.Remove(this.gameObject);
if (newSwitchOne)
{
switchOn = true;
}
else if (newSwitchTwo)
{
switchOff = true;
}
}
然后
void Update()
{
if (switchOn || switchOff)
{
var alpha = switchOn ? 0 : 1;
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, alpha), 0.0075f * Time.time);
if ((TextColor.color.a <= 0.023f && switchOn) || (TextColor.color.a >= 0.977f && switchOff))
{
TextColor.color = new Color(255, 255, 255, alpha);
switchOn = false;
switchOff = false;
newSwitchOne = switchOff;
newSwitchTwo = switchOn;
}
}
}
}
遗漏的其他答案是,有时 switchOn 和 switchOff 标志都变为假,在这种情况下我们不应该对 Update 做任何事情。
System.Action 不会做,因为它们 return 没有任何价值。但是 Func 会。
void MyMethodWithCondition(Func<bool>condition)
{
if(condition == null){ return; } // or throw exception
if(condition() == true)
{
// Do something
}
}
下面是你如何使用它:
MyMethodWithCondition(()=>{ return TextColor.color.a >= 0.977f; });
MyMethodWithCondition(()=>{ return TextColor.color.a <= 0.977f; });
Func 也可以接受一个或多个参数:https://msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx
我正在清理一些代码,更多的是为了改进。我有一个按钮可以打开和关闭一些文本。它的工作原理是使用指针,单击按钮并淡出所有项目,单击的项目除外:
public void OnHideClick()
{
AllText.Remove(this.gameObject);
if (newSwitchOne)
{
for (int i = 0; i < 3; i++)
{
switchOn = true;
}
}
else if (newSwitchTwo)
{
for (int i = 0; i < 3; i++)
{
switchOff = true;
}
}
}
更新根据布尔值的真值运行操作并忽略假值。这很好用。
void Update()
{
if (switchOn)
{
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, 0), 0.0075f * Time.time);
if (TextColor.color.a <= 0.023f)
{
TextColor.color = new Color(255, 255, 255, 0);
if (TextColor.color.a == 0.0f)
{
switchOn = false;
switchOff = false;
newSwitchOne = false;
newSwitchTwo = true;
}
}
}
}
if (switchOff)
{
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, 1), 0.005f * Time.time);
if (TextColor.color.a >= 0.977f)
{
TextColor.color = new Color(255, 255, 255, 1);
if (TextColor.color.a == 1.0f)
{
switchOn = false;
switchOff = false;
newSwitchOne = true;
newSwitchTwo = false;
}
}
}
}
}
我正在尝试清理这段代码。我非常了解函数和 CoRoutines,并且通过看到 if switchOn 和 if switchOff 的类似代码,我想知道我是否可以通过传递一些值作为参数来清理它。我试过这个,但似乎很难处理测试 color.alpha 值的 if 语句的条件,例如:
if (TextColor.color.a >= 0.977f)
我知道 sys.action 但这似乎并不奏效。据我所知,我相信将小于或大于符号“<”、“>”作为参数进行更改 帮助。我做了一些搜索 - 但没有找到太多可以帮助我的东西。也许看错了方向。
有人能帮我解释一下吗?
这行得通吗? 我已尝试确定代码的共性以尝试减少一些重复。
void Update()
{
var color = switchOn ? new Color(255, 255, 255, 0) : new Color(255, 255, 255, 1);
var multiplier = switchOn ? 0.0075f : 0.005f;
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, color, multiplier * Time.time);
if ((switchOn && TextColor.color.a <= 0.023f) || (!switchOn && TextColor.color.a >= 0.977f))
{
TextColor.color = color;
if ()
{
switchOn = false;
switchOff = false;
newSwitchOne = !switchOn;
newSwitchTwo = switchOn;
}
}
}
}
当您想根据 condition/value 创建代码时,使用此表示法可以生成干净灵活的代码:
test ? value1 : value2
如果您不习惯这种表示法,请查看它的工作原理:测试条件,如果为真则使用值 1,否则使用值 2。
例如:
float testVal =
if (TextColor.color.a == (switchOn ? 0.0f : 1.0f))
...
在上面的例子中,我假设你可以单独使用 switchOn(switchOn true > 你的 switchOn,switchOn false > 你的 switchOff)
public void OnHideClick()
{
AllText.Remove(this.gameObject);
if (newSwitchOne)
{
switchOn = true;
}
else if (newSwitchTwo)
{
switchOff = true;
}
}
然后
void Update()
{
if (switchOn || switchOff)
{
var alpha = switchOn ? 0 : 1;
for (int j = 0; j < 4; j++)
{
TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, alpha), 0.0075f * Time.time);
if ((TextColor.color.a <= 0.023f && switchOn) || (TextColor.color.a >= 0.977f && switchOff))
{
TextColor.color = new Color(255, 255, 255, alpha);
switchOn = false;
switchOff = false;
newSwitchOne = switchOff;
newSwitchTwo = switchOn;
}
}
}
}
遗漏的其他答案是,有时 switchOn 和 switchOff 标志都变为假,在这种情况下我们不应该对 Update 做任何事情。
System.Action 不会做,因为它们 return 没有任何价值。但是 Func 会。
void MyMethodWithCondition(Func<bool>condition)
{
if(condition == null){ return; } // or throw exception
if(condition() == true)
{
// Do something
}
}
下面是你如何使用它:
MyMethodWithCondition(()=>{ return TextColor.color.a >= 0.977f; });
MyMethodWithCondition(()=>{ return TextColor.color.a <= 0.977f; });
Func 也可以接受一个或多个参数:https://msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx