我刚接触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");
}
}
}
1条答案
按热度按时间bvn4nwqk1#
问题是您没有在任何地方定义List“lista”。
这样宣布:
public List<string> lista;
然后在Start()中执行以下操作:lista = new List<string>();
在声明时,可以将所有这些压缩到一行中,如下所示:
public List<string> lista = new List<string>();
希望它有帮助!