我有以下问题,如果有人可以提供帮助,我会非常感激。
我一直在尝试在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类?
答案 0 :(得分:2)
由于您使用的是Unity 4.6,它具有新的GUI系统,而不是您提到的教程时出现的Legacy UI。有两个选项 - 您可以创建空游戏对象并添加GUIText组件。您可以通过在层次结构中选择它来将GUIText添加到空游戏对象,该层次结构应在检查器面板中显示对象属性。
在Inspector中,您应该看到添加组件按钮,单击它并搜索GUIText。添加它,这应该可以解决您的问题。
哦,是的,第二种选择是迁移到Unity 4.6新的GUI,这需要花费时间,除非你非常善于团结。
如果您想学习Unity 4.6 GUI,可以参考这些链接
答案 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值有些随机。