【问题标题】:Change a Text dynamically using PointerEnter使用 PointerEnter 动态更改文本
【发布时间】:2016-05-25 03:17:18
【问题描述】:

由于我目前正在开发基于 Unity 引擎的游戏,因此我需要一个 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;

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

感谢您帮助我!

【问题讨论】:

  • 对象的第一个Update 总是在Awake() 之后调用。脚本是否在文本对象上? GetComponent 仅在该组件与脚本位于同一对象上时才有效。
  • @GunnarB。是的,脚本位于我要更改的特定文本上。所以脚本被附加到一个 GameObject,它被附加到 EventTrigger。
  • 脚本中有using UnityEngine.UI;? (我想是这样,否则你应该有不同的错误。)
  • @GunnarB。你猜对了 :) 如果你的想法不多了,我们可能会在 TeamViewer 见面,你可以看看我的代码吗?
  • 添加了一个答案,也许你可以从中找出你做错了什么。

标签: c# unity3d unity5


【解决方案1】:

这是一个工作示例。

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

我分别添加了两个事件触发器,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)。

就是这样,工作正常。

【讨论】:

  • 太棒了!太感谢了! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多