从文本文件中移动一个带有点列表的对象。

问题描述 投票:-1回答:1

我试图将我的立方体从一个点移动到一个点,其坐标来自一个文本文件,这样做是可行的,但问题是当我将 "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的情况下都不能工作。

c# unity3d format formatexception
1个回答
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
投票

我想你有一个像这样的文件,有制表符,数字之间有空格。

        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);
© www.soinside.com 2019 - 2024. All rights reserved.