代码之家  ›  专栏  ›  技术社区  ›  Beerman

Unity C#无法初始化无效列表开始:获取错误CS0103

  •  0
  • Beerman  · 技术社区  · 3 年前

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

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

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

    xposition;位置;zposition;旋转;X旋转;眩晕;zrotation

    xposition;位置;zposition;旋转;X旋转;眩晕;zrotation

    我想通过在void开始处创建空字符串列表,然后每次添加一个位置和旋转(在void RecPoint中)。之后,我会修改void SaveToFile,将所有内容保存为当前void SaveToFile中的内容。

    问题是无论我是否使用 var lista=新列表();

    lista=新列表();

    我得到了同样的错误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");
            }
        }
    }
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   apm11    3 年前

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

    声明如下: public List<string> lista; 然后在Start()中执行以下操作: lista = new List<string>();

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

    希望有帮助!