统一c#使用GetMouseButtondown将文本设置为true

时间:2018-12-11 01:55:02

标签: c# user-interface unity3d text

我基本上只想和NPC交谈。按下MouseButton(0)后,该文本应会显示。使用我当前的代码,只要按住鼠标按钮,文本就不会消失。

if (Input.GetMouseButton(0) && Input.GetMouseButton(0) && cc.height < 20 && Vector3.Distance(Larry.transform.position, this.transform.position) < 10)
{
    text1.SetActive(true);

如果我想在Vector3.Distance(Larry.transform.position, this.transform.position) < 10不再为真之前查看文本,该if语句应该如何?

2 个答案:

答案 0 :(得分:2)

假设将代码块放置在例如Update在每一帧都被称为,您只需要使文本保持启用状态,直到您匹配相反的条件为止

使用Input.GetMouseButtonDown(在按下鼠标按钮时仅在开始时触发一次)而不是Input.GetMouseButton(在按住鼠标按钮时每帧重复触发)也仅使用一个呼叫就足够了用于启用文本,因为它将“自动”保持启用状态。

if (Input.GetMouseButtonDown(0) && cc.height < 20 && Vector3.Distance(Larry.transform.position, transform.position) < 10)
{
    // Enable the text
    text1.SetActive(true);
}
// Meanwhile the second condiction isn't matched 
// the text stays active anyway
// Use if else to avoid an unnecessary check
// since only one of the two conditions can be true at the same time
else if(Vector3.Distance(Larry.transform.position, transform.position) >= 10)
{
    // Disable the text
    text1.SetActive(false);
}

答案 1 :(得分:1)

您只需要做同样的事情,但是像这样Vector3.Distance<10的相反:

 if(Vector3.Distance(Larry.transform.position, this.transform.position) => 10)
     text1.SetActive(false);  

哦,您有一个多余的Input.GetMouseButton(0),我相信只打一次就足够了。