使用PointerEnter

时间:2016-05-24 18:44:13

标签: c# unity3d unity5

由于我目前正在开发基于Unity Engine的游戏,我需要一个PointerEnter EventTrigger来动态更改我的文本。具体做法是:

如果用户在MainMenu中将鼠标悬停在文本上,我想要一个指针指向他指向的选项。 因此,从Options开始,文字应转向▶ Options

我所做的是以下内容:

Text text;
string ContinueText = "▶ Continue";

void Awake()
{
    // Set up the reference.
     text = GetComponent<Text>();
}
    public void Test()
{
    text.text = ContinueText;
}

但如果我将鼠标悬停在文字上,我就会

  

NullReferenceException:未将对象引用设置为对象的实例

指向text.text = ContinueText;

所以我在网上搜索,发现在 Awake()之前有时会调用void Update(),错误仍然保持不变。如果需要,Canvas-Text被命名为“Text_Options”。

感谢您帮助我!

1 个答案:

答案 0 :(得分:1)

这是一个工作示例。

具有空游戏对象的画布(具有垂直布局组,但不相关)是两个文本对象的容器。 enter image description here enter image description here

我已经添加了两个事件触发器,分别是OnPointerEnter和OnPointerExit。两个文本对象都有我的脚本HoverText

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class HoverText : MonoBehaviour
{
    Text text;
    public string content = "Text A";
    public string contentHighlighted = "▶ Text A";

    void Awake()
    {
        text = GetComponent<Text>();
        text.text = content;
    }

    public void Highlight()
    {
        text.text = contentHighlighted;
    }

    public void UnHighlight()
    {
        text.text = content;
    }
}

Text_A本身就是游戏对象,它分别是事件触发器和Text_B本身。两个不同文本内容的公共字符串是通过检查器设置的(脚本中的默认值实际上与我的示例中的Text_A匹配)。

那就好了。