【问题标题】:Unity GUI Text won't workUnity GUI 文本不起作用
【发布时间】:2014-12-20 19:17:49
【问题描述】:

我有以下问题,如果有人可以提供帮助,我将不胜感激。

我一直在尝试在 Unity 中创建一个滚球游戏,类似于他们官方网站上的一个教程中介绍的游戏,但有一个区别:我想添加 GUI 文本以显示分数。每次球击中(并破坏)其中一个旋转的立方体时,分数应增加 1,并且文本应显示当前分数。

我看过以下教程:

http://unity3d.com/learn/tutorials/projects/space-shooter/counting-points

我创建了名为 ScoreText 的 UI 文本,另一方面,我编写了一个脚本,该脚本使一个名为 guitext 的 GUIText 类的实例显示当前分数。但是,我无法将我的特定 GUI 文本 (ScoreText) 与脚本连接起来,即我无法告诉脚本使用该特定 GUI 文本来显示分数。在视频中,在 16:35,他们只是将 GUI 文本从脚本拖到 GUIText 类的实例(在我的例子中是 guitext),以便告诉脚本应该显示分数的特定文本。但是当我试图拖动它时,我根本做不到。我不知道为什么。

我不知道这是否会导致问题:在免费版 Unity 的“创建”下,我找不到任何名为“GUI 文本”的内容,而是创建了一个 UI 文本。我知道这是同一件事,但是......在脚本中,我定义了一个 GUIText 类的实例 - guitext - 所以当我尝试向其中添加 UI 文本时,它可能不起作用,因为我的文本真的没有t 属于 GUIText 类吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow!您可能希望将您发布的内容提炼成更集中的内容。想象一下,你正在给你的同事写一封电子邮件。我们很难阅读段落和段落并弄清楚您想要什么。给出几句话的背景,解释你需要什么,然后明确地陈述你的问题。这样,我们就能更轻松地为您提供帮助。
  • 上传你的代码,让我看看问题出在哪里。
  • 你使用的是什么版本的统一?我不相信 GuiText 和 UI Text 是一回事,因此你为什么不能将它拖到检查器变量中......

标签: user-interface unity3d


【解决方案1】:

因为您使用的是 Unity 4.6,它有一个新的 GUI 系统,而不是在制作您提到的教程时出现的旧版 UI。有两个选项 - 创建一个 empty gameobject 并向其中添加一个 GUIText 组件。您可以通过在 Hierarchy 中选择它来将 GUIText 添加到空游戏对象,这应该会在 Inspector 面板中显示对象属性。

在 Inspector 中,您应该会看到一个 Add Component 按钮,单击它并搜索 GUIText。添加它应该可以解决您的问题。

哦,是的,第二个选项是迁移到 Unity 4.6 新 GUI,除非您非常熟悉 Unity,否则这需要时间。

如果你想学习 Unity 4.6 GUI,你可以参考这些链接

Unity Official

Unity 4.6 tutorials by TheGameContriver

【讨论】:

    【解决方案2】:

    我只是在此发帖,因为很多人来到这个并迷路了。以下是在此响应时如何在 Unity5.3 中进行这项工作。 这是在 C# 中

    只需使用 GameController 游戏对象将脚本附加到。其次创建一个 UI 文本。 Toy 仅将其称为 score 或 scoretext 以供您自己推荐,否则名称本身无关紧要。

    using UnityEngine;
    using UnityEngine.UI;///needed to reference the new UI setup in this script type
    using System.Collections;/// <summary>
    /// allows collections of related information. 
    /// </summary>
    
    
    public class GameController : MonoBehaviour { 
    
    public GameObject targets;
    public Vector3 spawnValues;
    public int hazardCount;
    public float spawnWait;
    public float startWait;
    public float waveWait;
    
    public Text Text; /// <summary>
    /// change this because you dont actually use the words UI or GUI. Thats just for the reference and not clarified by instructors. 
    /// </summary>
    private int score;
    
    void Start()
    {
        score = 0;
        UpdateScore();
        StartCoroutine(SpawnWaves());
    }
    
    IEnumerator SpawnWaves()///this depends on the above using System.Collections
    {
        yield return new WaitForSeconds(startWait);
        while (true)
        {
            for (int i = 0; i < hazardCount; i++)
            {
                Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
                Quaternion spawnRotation = Quaternion.identity;
                Instantiate(targets, spawnPosition, spawnRotation);
                yield return new WaitForSeconds(spawnWait);
            }
            yield return new WaitForSeconds(waveWait);
        }
    }
    
    public void AddScore(int newScoreValue)
    {
        score += newScoreValue;
        UpdateScore();
    }
    
    void UpdateScore()
    {
        Text.text = "Score: " + score;
    }
    }
    

    【讨论】:

    • 这适用于 Unity 5.4。您需要“使用 UnityEngine.UI;”删除文本之前的 GUI。
    【解决方案3】:

    已确认。在GameController.cs文件中,将public GUIText scoreText的声明修改为public Text scoreText,然后它就会让你将它拖到游戏控制器上,如视频所示。

    各位,更新你的 Unity 教程吧!刚刚花了一个小时试图弄清楚这一点!

    【讨论】:

    • 注意需要添加“using UnityEngine.UI;”
    【解决方案4】:

    还有一件事……检查 Z 位置。我的 UI 在场景视图中看起来很完美,但我的文字从未在游戏中显示……然后我旋转了场景视图,发现我的文字在镜头后面。似乎当您向 UI 添加一些东西时,z 值有些随机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-03
      • 2018-05-11
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      相关资源
      最近更新 更多