如何在满足条件时停止更新 SetDownState()

How to stop an updating SetDownState() when a condition is met

我正在使用 SetDownState() 代码,因为有时我需要玩家同时按下两个按钮。问题是任何时候 buttonSetDownState == 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();
         }
    }