在Unity屏幕上显示多个文本文件

本文关键字:文本 文件 显示 Unity 屏幕 | 更新日期: 2023-09-27 18:11:04

这段代码成功地读取了一个文本文件,并允许它作为GUI Label显示。我想知道如何为多个文本文件做到这一点?我不希望他们在一起,就像单独的标签,我想可能是数组或列表,但我不确定。谢谢你的帮助

using UnityEngine;
using System.Collections;
using System.IO;
public class OnClick : MonoBehaviour
{
public StreamReader reader = null;
public FileInfo theSourceFile = null;
public void Start()
    {
          theSourceFile = new FileInfo(Application.dataPath + "/puzzles.txt");
          if (theSourceFile != null && theSourceFile.Exists)
            reader = theSourceFile.OpenText();
        if (reader == null)
        {
          Debug.Log("puzzles.txt not found or not readable");
        }
        else
        {
          while ((txt = reader.ReadLine()) != null)
            {
                Debug.Log("-->" + txt);
                completeText += txt + "'n";
             }
          }
        }
public void OnGUI()
    {
            if (Input.GetKey(KeyCode.Tab))
            {
                GUI.contentColor = Color.red;
                GUI.Label(new Rect(1000, 50, 400, 400), completeText);
            }
    }

在Unity屏幕上显示多个文本文件

在类中,添加一个字符串列表:

private List<string> _allFiles = new List<string>();

Start()分离为另一个方法,并为每个文件调用该方法。在每个进程结束时,将completeText变量添加到该列表中,如下所示:

public void Start()
{
    theSourceFile = new FileInfo(Application.dataPath + "/puzzles.txt");
    ProcessFile(theSourceFile);
    // set theSourceFile to another file
    // call ProcessFile(theSourceFile) again
}
private void ProcessFile(FileInfo file)
{
      if (file != null && file.Exists)
        reader = file.OpenText();
    if (reader == null)
    {
      Debug.Log("puzzles.txt not found or not readable");
    }
    else
    {
      while ((txt = reader.ReadLine()) != null)
        {
            Debug.Log("-->" + txt);
            completeText += txt + "'n";
         }
         _allFiles.Add(completeText);
    }
}

最后,在OnGui()方法中,在GUI.Label调用周围添加一个循环。

int i = 1;
foreach(var file in _allFiles)
{
    GUI.Label(new Rect(1000, 50 + (i * 400), 400, 400), file);
    i++;
}

这里假设您希望标签垂直显示,并且它们之间没有间隔。