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

时间:2016-02-05 06:35:53

标签: unity3d multi-touch

我正在使用SetDownState()代码,因为我需要播放器同时按下两个按钮。问题是,只要buttonSetDownState == true,它就会不断更新。

enter image description here

当按下按钮时会发生以下脚本运行。但按钮仍在运行。因此,如果条件发生变化,最终会让玩家失败,即使他们赢了。

这是“按钮”脚本(从资产样本中获取):

 namespace UnityStandardAssets.CrossPlatformInput

{
    public class YayButtonTouch : MonoBehaviour
    {

        public bool yayButtonTouch = false;

        public string Name;

        public void SetDownState()
        {

            yayButtonTouch = true;
        }


        public void SetUpState()
        {
            yayButtonTouch = false;
        }
    }
}

以下是代码的工作原理。根据条件,它会改变按钮的功能。满足条件后,它会运行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();
            }
     }
 }

我希望我能够很好地解释这一点。

1 个答案:

答案 0 :(得分:1)

这可能是你的解决方案:

WHEN button A is touched DOWN,
  if button B is pressedDown,
    ... code for "both down"

所以你需要事件或其他任何“按下第一个按钮”

我不知道你在那里使用了什么奇怪的按钮库,但这是一般的算法解决方案:O

另一种更通用的方法是:

当任何按钮完全向上或向下移动时,   看看这两个按钮。   实际上是两个按钮现在“向下”      如果是这样,..代码为“两个下来”

这也会奏效。希望这有帮助

注意

一个HAS TO USE子程序用于这么长的代码段,它不会像你拥有的那样编译。此外 - 永远不要因为任何原因使用“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();
         }
    }