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

tkclm6bt  于 2023-03-19  发布在  C#
关注(0)|答案(1)|浏览(225)

我刚接触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");
        }
    }
}
bvn4nwqk

bvn4nwqk1#

问题是您没有在任何地方定义List“lista”。
这样宣布:public List<string> lista;然后在Start()中执行以下操作:lista = new List<string>();
在声明时,可以将所有这些压缩到一行中,如下所示:public List<string> lista = new List<string>();
希望它有帮助!

相关问题