Unity - OnMouseDown双击

时间:2018-03-29 11:41:49

标签: c# unity3d

我正在制作的游戏中有四个游戏对象,当我点击每个游戏对象时,会打开一个对话框。

我的问题是我正在使用OnMouseDown,第一个总是需要点击两次。它只发生在OnMouseDown上,我在游戏上的按钮工作正常。

public static GameObject selectedClient;
public bool isBuying;

private Manager manager;

private void Start()
{
    manager = GameObject.FindObjectOfType(typeof(Manager)) as Manager;
}

private void OnMouseDown()
{
    if (isBuying == true)
    {
        selectedClient = this.gameObject;
        manager.Talk();
    }
    else if (isBuying == false)
    {
        manager.NotTalk();
    }
}

Talk()和NotTalk()如下:

    public void Talk()
{
    dialogueBox.SetActive(true);
    Time.timeScale = 0f;
    actualClient = Client.selectedClient;
}

public void NotTalk()
{
    dialogueBox.SetActive(false);
    Time.timeScale = 1f;
}

有人知道为什么会这样吗?

提前致谢。

3 个答案:

答案 0 :(得分:4)

假设manager.Talk()打开对话框,最初可能isBuying为false,单击一次后切换为<?p>

修改:使用TalkNotTalk方法更新用户的问题。

既然你最初说的话,只有时间停止,但是对话框没有显示,这是因为它没有填充或正确初始化?你能展示一下你期望出现的代码吗?

它可能只是对象框没有任何东西可以显示,因此,不会通过第二次点击,它以某种方式正确填充并可以显示。

答案 1 :(得分:1)

如果我理解正确,似乎在第一次鼠标点击时成功调用OnMouseDown()Talk(),但需要第二次鼠标点击才能显示dialogueBox

如果成功调用dialogueBox.SetActive(true),您可以查看Unity场景层次结构窗口,看它是否在第一次鼠标点击后变得活跃。如果确实如此,那么您可以检查该对象,看看它为什么没有出现在屏幕上。 (正如另一张海报所提到的,它可能与dialogueBox初始化有关。)

此外,这些问题可能有助于我们调试并找出问题所在:

  • 当您“点击一个对象然后点击其他对象”时会出现什么错误?
  • 如果您按其他顺序点击按钮会怎样?如果有4个按钮,它是第一个始终受影响的按钮,还是您单击的第一个按钮?

一般情况下,正如其他海报所建议的那样,使用Debug.LogDebug.Assert可以帮助您缩小问题的范围。同样,您可以在代码中设置断点并逐步查看代码是否按预期运行。正如我在本文中提到的,Unity场景层次结构窗口也可用于调试。

答案 2 :(得分:0)

添加Debug.log(isBuying);上面(isBuying == true)。

然后,您将知道OnMouseDown()是否首先被调用,以及它是否像您期望的那样进行。在那之后,你应该能够自己修复它,否则,请让我知道你发现了什么。