如何在满足条件时停止更新 SetDownState()
How to stop an updating SetDownState() when a condition is met
我正在使用 SetDownState()
代码,因为有时我需要玩家同时按下两个按钮。问题是任何时候 button
是 SetDownState == true
它都会不断更新。
按下按钮时会发生什么,下面的脚本将 运行。但是按钮还是运行ning。因此,如果条件发生变化,即使玩家赢了,最终也会让玩家输。
这是 "Button" 脚本(从资产示例中获取):
namespace UnityStandardAssets.CrossPlatformInput
{
public class YayButtonTouch : MonoBehaviour
{
public bool yayButtonTouch = false;
public string Name;
public void SetDownState()
{
yayButtonTouch = true;
}
public void SetUpState()
{
yayButtonTouch = false;
}
}
}
代码的工作原理如下。根据条件,它会更改按钮的功能。一旦满足条件,它 运行s WinningScript()
或 Losing Script()
你在这里看不到,但是 Win 条件会改变 CrowdTypes
void Update ()
{
if (cm.crowdOptions == CrowdManager.CrowdTypes.None) {
if (yt.yayButtonTouch == true)
{
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA) {
if (sm.teamScored == ScoreManager.teamsScore.TeamAScore) {
if (yt.yayButtonTouch == true)
{
iyt.WinningScript();
}
if (bt.booButtonTouch == true)
{
iyt.LosingScript();
}
} else if (sm.teamScored != ScoreManager.teamsScore.TeamAScore) {
if (yt.yayButtonTouch == true)
{
iyt.LosingScript();
}
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB) {
if (sm.teamScored == ScoreManager.teamsScore.TeamBScore) {
if (yt.yayButtonTouch == true)
{
iyt.WinningScript();
}
if (bt.booButtonTouch == true)
{
iyt.LosingScript();
}
} else if (sm.teamScored != ScoreManager.teamsScore.TeamBScore) {
if (yt.yayButtonTouch == true)
{
iyt.LosingScript();
}
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
}
我希望我解释得足够好。
这是否可能是您的解决方案:
WHEN button A is touched DOWN,
if button B is pressedDown,
... code for "both down"
所以您需要 "on button first pressed down"
的事件或其他内容
我不知道你在那里使用的是什么奇怪的按钮库或任何东西,但这是这里的一般算法解决方案:O
另一种更通用的方法是:
当任何按钮向上或向下时,
看看两个按钮。
实际上现在都是两个按钮 "down"
如果是这样,.. "both down"
的代码
那也行。希望这有帮助
备注
这么长的代码段落必须使用子例程,它不会像您拥有的那样编译。另外 - 永远不要以任何理由使用 "else-if"。
您必须像这样更改您的代码:
void Update ()
{
if (cm.crowdOptions == CrowdManager.CrowdTypes.None)
{
SituationA();
return;
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA)
{
SituationB();
return;
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB)
{
SituationC();
return;
}
// OR, USE A SWITCH STATEMENT FOR THOSE THREE. TRY BOTH WAYS!
}
private void SituationA()
{
if (yt.yayButtonTouch == true)
if (bt.booButtonTouch == true)
iyt.WinningScript();
}
private void SituationB()
{
if (sm.teamScored == ScoreManager.teamsScore.TeamAScore)
{
if (yt.yayButtonTouch == true) iyt.WinningScript();
if (bt.booButtonTouch == true) iyt.LosingScript();
}
else
{
if (yt.yayButtonTouch == true) iyt.LosingScript();
if (bt.booButtonTouch == true) iyt.WinningScript();
}
}
private void SituationC()
{
if (sm.teamScored == ScoreManager.teamsScore.TeamBScore)
{
if (yt.yayButtonTouch == true) iyt.WinningScript();
if (bt.booButtonTouch == true) iyt.LosingScript();
}
else
{
if (yt.yayButtonTouch == true) iyt.LosingScript();
if (bt.booButtonTouch == true) iyt.WinningScript();
}
}
我正在使用 SetDownState()
代码,因为有时我需要玩家同时按下两个按钮。问题是任何时候 button
是 SetDownState == true
它都会不断更新。
按下按钮时会发生什么,下面的脚本将 运行。但是按钮还是运行ning。因此,如果条件发生变化,即使玩家赢了,最终也会让玩家输。
这是 "Button" 脚本(从资产示例中获取):
namespace UnityStandardAssets.CrossPlatformInput
{
public class YayButtonTouch : MonoBehaviour
{
public bool yayButtonTouch = false;
public string Name;
public void SetDownState()
{
yayButtonTouch = true;
}
public void SetUpState()
{
yayButtonTouch = false;
}
}
}
代码的工作原理如下。根据条件,它会更改按钮的功能。一旦满足条件,它 运行s WinningScript()
或 Losing Script()
你在这里看不到,但是 Win 条件会改变 CrowdTypes
void Update ()
{
if (cm.crowdOptions == CrowdManager.CrowdTypes.None) {
if (yt.yayButtonTouch == true)
{
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA) {
if (sm.teamScored == ScoreManager.teamsScore.TeamAScore) {
if (yt.yayButtonTouch == true)
{
iyt.WinningScript();
}
if (bt.booButtonTouch == true)
{
iyt.LosingScript();
}
} else if (sm.teamScored != ScoreManager.teamsScore.TeamAScore) {
if (yt.yayButtonTouch == true)
{
iyt.LosingScript();
}
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB) {
if (sm.teamScored == ScoreManager.teamsScore.TeamBScore) {
if (yt.yayButtonTouch == true)
{
iyt.WinningScript();
}
if (bt.booButtonTouch == true)
{
iyt.LosingScript();
}
} else if (sm.teamScored != ScoreManager.teamsScore.TeamBScore) {
if (yt.yayButtonTouch == true)
{
iyt.LosingScript();
}
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
}
我希望我解释得足够好。
这是否可能是您的解决方案:
WHEN button A is touched DOWN,
if button B is pressedDown,
... code for "both down"
所以您需要 "on button first pressed down"
的事件或其他内容我不知道你在那里使用的是什么奇怪的按钮库或任何东西,但这是这里的一般算法解决方案:O
另一种更通用的方法是:
当任何按钮向上或向下时, 看看两个按钮。 实际上现在都是两个按钮 "down" 如果是这样,.. "both down"
的代码那也行。希望这有帮助
备注
这么长的代码段落必须使用子例程,它不会像您拥有的那样编译。另外 - 永远不要以任何理由使用 "else-if"。
您必须像这样更改您的代码:
void Update ()
{
if (cm.crowdOptions == CrowdManager.CrowdTypes.None)
{
SituationA();
return;
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA)
{
SituationB();
return;
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB)
{
SituationC();
return;
}
// OR, USE A SWITCH STATEMENT FOR THOSE THREE. TRY BOTH WAYS!
}
private void SituationA()
{
if (yt.yayButtonTouch == true)
if (bt.booButtonTouch == true)
iyt.WinningScript();
}
private void SituationB()
{
if (sm.teamScored == ScoreManager.teamsScore.TeamAScore)
{
if (yt.yayButtonTouch == true) iyt.WinningScript();
if (bt.booButtonTouch == true) iyt.LosingScript();
}
else
{
if (yt.yayButtonTouch == true) iyt.LosingScript();
if (bt.booButtonTouch == true) iyt.WinningScript();
}
}
private void SituationC()
{
if (sm.teamScored == ScoreManager.teamsScore.TeamBScore)
{
if (yt.yayButtonTouch == true) iyt.WinningScript();
if (bt.booButtonTouch == true) iyt.LosingScript();
}
else
{
if (yt.yayButtonTouch == true) iyt.LosingScript();
if (bt.booButtonTouch == true) iyt.WinningScript();
}
}