C# 如何在Unity中使用空格键控制gui文本?

C# 如何在Unity中使用空格键控制gui文本?,c#,unity3d,2d,C#,Unity3d,2d,免责声明:我是Unity的新手,请容忍我 基本上,我希望有一个文本元素,它一次显示多个句子,一个字母,并在句子末尾停止。此外,如果按下空格键,则该句子的剩余文本应立即显示,但如果该句子已完成,则应显示下一个句子 到目前为止,我已经设法让文本使用数组中存储的字符串一次显示一个字母。然而,我现在很难使用空格键从一个索引导航到另一个索引,也很难获得完整的句子来显示空格键是否被按下 代码如下: using UnityEngine; using UnityEngine.UI; using System.C

免责声明:我是Unity的新手,请容忍我

基本上,我希望有一个文本元素,它一次显示多个句子,一个字母,并在句子末尾停止。此外,如果按下空格键,则该句子的剩余文本应立即显示,但如果该句子已完成,则应显示下一个句子

到目前为止,我已经设法让文本使用数组中存储的字符串一次显示一个字母。然而,我现在很难使用空格键从一个索引导航到另一个索引,也很难获得完整的句子来显示空格键是否被按下

代码如下:

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非常有助于让句子完成。然而,如果再次按下空格,我想显示下一句话,而不是使用第二次等待时间。