如何解决此代码中的双击问题?

时间:2019-08-12 22:36:24

标签: c# unity3d

https://media.giphy.com/media/WrOMxTqq1IxmytsvPQ/giphy.gif

请参阅上面的gif,以更好地了解发生了什么。第一次单击时,它们都可以正常工作,但是第一次单击后,我必须双击它们以选择它们。我不是一个高级开发人员,所以我一直试图连续两个小时弄清楚这个问题,我想问你们一个最后的选择。

我在这里声明了选择效果。 (白色圆圈),并添加了一个数组以获取所有选择效果。

    public GameObject selectEffect;
    private bool isSelected = false;
    public GameObject[] selectEffectArray;

我将它们放在数组中。

    private void Awake()
    {
        selectEffectArray = GameObject.FindGameObjectsWithTag("planetSelected");
        selectEffect = transform.Find("selectEffect").gameObject;
    }

我在启动时停用了所有选择效果。

    void Start()
    {
        Deactivate();
    }

此处是停用代码。

    void Deactivate()
    {
        foreach (GameObject effect in selectEffectArray)
        {
            effect.SetActive(false);
        }
    }

当我单击其中一颗行星时,就会发生这些情况。 (我有些困惑,希望您能理解。)

    void OnMouseUp()
    {
        if (isSelected)
        {
            selectEffect.SetActive(false);
            travelbutton.SetActive(false);
            isSelected = false;
        }
        else
        {
            Deactivate();

            planetName_text.text = planet.name;
            requiredFuel_text.text = planet.requiredFuel.ToString();
            travelbutton.SetActive(true);
            selectEffect.SetActive(true);
            isSelected = true;
        }

    }

我不想双击一个行星来选择它。

2 个答案:

答案 0 :(得分:0)

status=DELETED

答案 1 :(得分:0)

在解决这些逻辑难题时,总是有助于绘制状态机。最上面的图是您希望代码如何工作(iS = isSelected,OMU = onMouseUp)。底部是它实际的工作方式。正如其他人所说的那样,当调用“停用”关闭效果但不更改isSelected时会出现问题,导致需要额外单击以使isSelected为false才能正确触发效果。

State Machine