C# 如何在Unity中使用空格键控制gui文本?
免责声明:我是Unity的新手,请容忍我 基本上,我希望有一个文本元素,它一次显示多个句子,一个字母,并在句子末尾停止。此外,如果按下空格键,则该句子的剩余文本应立即显示,但如果该句子已完成,则应显示下一个句子 到目前为止,我已经设法让文本使用数组中存储的字符串一次显示一个字母。然而,我现在很难使用空格键从一个索引导航到另一个索引,也很难获得完整的句子来显示空格键是否被按下 代码如下:C# 如何在Unity中使用空格键控制gui文本?,c#,unity3d,2d,C#,Unity3d,2d,免责声明:我是Unity的新手,请容忍我 基本上,我希望有一个文本元素,它一次显示多个句子,一个字母,并在句子末尾停止。此外,如果按下空格键,则该句子的剩余文本应立即显示,但如果该句子已完成,则应显示下一个句子 到目前为止,我已经设法让文本使用数组中存储的字符串一次显示一个字母。然而,我现在很难使用空格键从一个索引导航到另一个索引,也很难获得完整的句子来显示空格键是否被按下 代码如下: using UnityEngine; using UnityEngine.UI; using System.C
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TextScript : MonoBehaviour {
public Animator bar;
public float letterPause = 0.1f;
string[] strArray = new string[3];
string str;
int i;
int count;
void Start () {
bar.enabled = true;
strArray[0] = "Hello and welcome to the game";
strArray[1] = "The is the next line of code";
strArray[2] = "Testing the space bar";
gameObject.GetComponent<Text> ().text = "";
StartCoroutine(TypeText ());
}
void Update () {
if (Input.GetKeyDown ("space")) {
gameObject.GetComponent<Text> ().text = "";
count = count + 1;
i = i + 1;
TypeText();
}
}
IEnumerator TypeText () {
for (i = 0; i < strArray.Length; i++) {
str = strArray[i];
if (i == count) {
foreach (char letter in str.ToCharArray()) {
gameObject.GetComponent<Text> ().text += letter;
yield return new WaitForSeconds (letterPause);
}
}
}
}
}
因此,我不确定实现我真正想要的最好方式是什么。任何帮助都会很好 我在这个盒子上没有unity来测试这个,但是试试这个
public float letterPause = 0.1f;
public float SentencePause = 2.0f;
string[] strArray = new string[3];
bool skipToNext = false;
void Start () {
strArray[0] = "Hello and welcome to the game";
strArray[1] = "The is the next line of code";
strArray[2] = "Testing the space bar";
gameObject.GetComponent<Text> ().text = "";
StartCoroutine(TypeText ());
}
void Update () {
if (Input.GetKeyDown ("space")) {
skipToNext = true;
}
}
IEnumerator TypeText () {
for (int i = 0; i < strArray.Length; i++)
{
foreach (char letter in strArray[i].ToCharArray())
{
if (skipToNext)
{
gameObject.GetComponent<Text> ().text = strArray[i];
skipToNext = false;
break;
}
gameObject.GetComponent<Text> ().text += letter;
yield return new WaitForSeconds (letterPause);
}
yield return new WaitForSeconds (SentencePause);
gameObject.GetComponent<Text> ().text = "";
}
gameObject.GetComponent<Text> ().text = strArray[strArray.Length - 1];
}
编辑以反映评论更新。感谢您的帮助,尝试了代码,效果不错。我遇到的困难是将脚本存储在脚本中并将其读取到gui文本元素,而不是在inspector中键入它。您试图将其设置为什么?在您当前的代码中,您正在将文本本身设置为某种形式。我现在已经完成了这一部分,谢谢您的帮助。如果你看一下我问题的编辑版本,我做了一些修改,还有一些其他的挑战。你需要某种控制。我用一个工作示例更新了我的答案,以满足您的需要。简言之,我设置了一个控制布尔值,每个字母迭代都会检查它是否为真,如果为真,它将设置完整的句子并打破键入循环。在继续之前,你还需要一个次要的等待时间,等待你想让句子显示多长时间。当空格被按下时,添加bool非常有助于让句子完成。然而,如果再次按下空格,我想显示下一句话,而不是使用第二次等待时间。