Переместить объект со списком точек из текстового файла - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь переместить свой куб из точки в точку, где координаты взяты из текстового файла.

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 "by 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)

Я хотел протестировать с первым элементом, чтобы я мог сделать для l oop, но он даже не работает с 0 ..

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Я полагаю, у вас есть такой файл с табуляцией и пробелом между числами

        0.10340200    0.01262700   0.46301100



    0.10340200        0.01262700 0.46301100        
        0.10340200 0.01262700 0.46301100         

Я предлагаю вам использовать список Vector3 напрямую и конвертировать в Float, а не одиночный, потому что Vector3 является вектором 3 с плавающей запятой, поэтому, если вы конвертируете в single, другое преобразование будет выполнено снова (и вы потеряете точность) ..

    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);
0 голосов
/ 09 мая 2020

Я решил проблему! Я просто поставил одно пустое место для разделения вместо 5 или 6 (это зависит от того, есть ли - или нет) ... Я распечатал свои столбцы, все они работают! Спасибо за это ! Но теперь я пытаюсь переместить свой объект из вектора в вектор с помощью для l oop:

 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);


        }

, но похоже, что куб мгновенно перемещается в последнюю точку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...