我试图将我的立方体从一个点移动到一个点,其坐标来自一个文本文件,这样做是可行的,但问题是当我将 "1.45""3.25 "和 "4.25 "用columnx[0]columny[0]和columnz[0]代替时,得到的结果是 "1.45""3.25 "和 "4.25"。
public class cube : MonoBehaviour
{
// Speed
public float speed = 3.0f;
// Start is called before the first frame update
void Start()
{
print("cube says hi");
}
// Update is called once per frame
void Update()
{
string path = "Assets/Ressources/test.txt";
var sr = new StreamReader(path);
List<string> columnx = new List<string>();
List<string> columny = new List<string>();
List<string> columnz = new List<string>();
using (sr)
{
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
var values = line.Split(new string[] { " " }, System.StringSplitOptions.RemoveEmptyEntries);
columnx.Add(values[0]);
columny.Add(values[1]);
columnz.Add(values[2]);
}
}
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position,
new Vector3(
Convert.ToSingle("1.45", CultureInfo.InvariantCulture), Convert.ToSingle("3.258", CultureInfo.InvariantCulture), Convert.ToSingle("4.256", CultureInfo.InvariantCulture)
), step);
}
}
这个方法可行,但问题是当我把 "1.45""3.25 "和 "4.25 "用columnx[0] columny[0]和columnz[0]来代替时,我得到的是
FormatException: Input string was not in a correct format.
System.Number.ParseSingle (System.String value, System.Globalization.NumberStyles options, System.Globalization.NumberFormatInfo numfmt) (at <437ba245d8404784b9fbab9b439ac908>:0)
我想用第一个元素来测试,这样我就可以做一个for循环,但它甚至在0的情况下都不能工作。
我解决了这个问题! 我只是放了一个空格,而不是5个或6个(因为这取决于是否有一个-或没有)...... 我打印了我的列,它们都在工作!谢谢你!但现在我试图移动我的对象从矢量到矢量与for循环。
for (int i =0; i< columnx.Count ; i++)
{
position = new Vector3(Convert.ToSingle(columnx[i], CultureInfo.InvariantCulture), Convert.ToSingle(columny[i], CultureInfo.InvariantCulture), Convert.ToSingle(columnz[i], CultureInfo.InvariantCulture));
transform.position = Vector3.MoveTowards(currentPosition, position, step);
}
但看起来像立方体在最后一个点上立即移动了
我想你有一个像这样的文件,有制表符,数字之间有空格。
0.10340200 0.01262700 0.46301100
0.10340200 0.01262700 0.46301100
0.10340200 0.01262700 0.46301100
我建议你直接使用Vector3的列表,并转换为Float,而不是单一的,因为Vector3是3个float的向量,所以如果你转换为单一的,另一个转换又要重新进行(你会失去精度)......
List<Vector3> vec = new List<Vector3>();
string path = "Assets/file.txt";
var fileLines = System.IO.File.ReadAllLines(path);
foreach (var line in fileLines)
{
var result = line.Split(new char[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (result.Length == 3)
{
var x = float.Parse(result[0], CultureInfo.InvariantCulture);
var y = float.Parse(result[1], CultureInfo.InvariantCulture);
var z = float.Parse(result[2], CultureInfo.InvariantCulture);
vec.Add(new Vector3(x, y, z));
}
}
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position,
vec[0], step);