Unity GUI Text不起作用

时间:2014-12-20 19:17:49

标签: user-interface unity3d

我有以下问题,如果有人可以提供帮助,我会非常感激。

我一直在尝试在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类?

4 个答案:

答案 0 :(得分:2)

由于您使用的是Unity 4.6,它具有新的GUI系统,而不是您提到的教程时出现的Legacy UI。有两个选项 - 您可以创建空游戏对象并添加GUIText组件。您可以通过在层次结构中选择它来将GUIText添加到空游戏对象,该层次结构应在检查器面板中显示对象属性。

在Inspector中,您应该看到添加组件按钮,单击它并搜索GUIText。添加它,这应该可以解决您的问题。

哦,是的,第二种选择是迁移到Unity 4.6新的GUI,这需要花费时间,除非你非常善于团结。

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

Unity Official

Unity 4.6 tutorials by TheGameContriver

答案 1 :(得分:1)

我只是张贴在此,因为很多人来到这个并迷路了。以下是在响应时如何在Unity5.3中完成此工作。 这是在C#

只需使用GameController游戏对象将脚本附加到。第二步创建UI文本。玩具只会为自己的推荐称之为得分或得分文本,否则名称本身无关紧要。

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;
}
}

答案 2 :(得分:1)

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

更新您的Unity教程,人们!花了一个小时试图解决这个问题!

答案 3 :(得分:0)

还有一件事......检查Z位置。我的UI在场景视图中看起来非常完美,但我的文字从未在游戏中显示过...然后我旋转了场景视图,发现我的文字在摄像机后面。似乎在向UI添加内容时,z值有些随机。