Unity C# 无法在 void Start 中初始化列表:获取错误 CS0103

Unity C# Can't initialise list in void Start: getting error CS0103

我刚接触 C#(我用其他语言编程),我接到了一个任务,要在 Unity3D 游戏中记录物体的位置和旋转。

我成功地创建了在 Unity 控制台中打印当前位置和旋转设置时间的代码(void RecPoint 的部分没有 lista),最后它将所有位置数据保存在一个文件 (void SaveToFile).

我想做的是创建一个文件来同时保存位置和旋转,如下所示:

xposition; yposition; zposition; wrotation; xrotation; yrotation; zrotation
xposition; yposition; zposition; wrotation; xrotation; yrotation; zrotation

我想通过在 void Start 处创建空字符串列表然后一次添加位置和旋转一步(在 void RecPoint 中)来实现这一点。之后,我将修改 void SaveToFile 以保存与当前 void SaveToFile 中的内容类似的所有内容。

问题是无论我用var lista = new List<string>()还是lista = new List<string>().

我得到了同样的错误 CS0103,唯一的区别是当使用 var lista 时,我没有得到这一行的 CS0103 错误。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ReadData : MonoBehaviour
{
    public string fileName = "D:/position.txt";
    public List<Vector3> positions;
    public List<Quaternion> rotations;

    public float interval = 0.2f;
    public float tSample = 1.0f;


    void Start() {
        positions = new List<Vector3>();
        rotations = new List<Quaternion>();
        var lista = new List<string>();
        InvokeRepeating("RecPoint", tSample, interval);

    }

    void RecPoint()
    {
        positions.Add(transform.position);
        rotations.Add(transform.rotation);
        lista.Add(transform.position.ToString());
        lista.Add(transform.rotation.ToString());
        Debug.Log("position " + transform.position + " rotation " + transform.rotation);
    }

    void SaveToFile(string fileName)
    {
        foreach (Vector3 pos in positions)
        {
            string line = System.String.Format("{0,3:f2};{1,3:f2};{2,3:f2}\r\n", pos.x, pos.y, pos.z);
            System.IO.File.AppendAllText(fileName, line);
        }



    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.O))
        {
            CancelInvoke("RecPoint");
            SaveToFile(fileName);
            Debug.Log("Koniec czytania danych, zapisuję do pliku");
        }
    }
}

嗯,问题是你没有在任何地方定义列表“lista”。

这样声明:public List<string> lista; 然后在 Start() 中执行:lista = new List<string>();

您可以在声明时将所有这些压缩到一行中,如下所示:public List<string> lista = new List<string>();

希望对您有所帮助!