Próbuję zrobić kilka walkerów zamiast jednego dla mojego algorytmu spaceru w pijak i natknął się na problem.

using System.Collections.Generic;
using UnityEngine;

public class tw : MonoBehaviour
{
List<Vector3> walkers;
Vector3 walker;
void Start()
{
    walker = new Vector3(5, 0, 5);

    walkers = new List<Vector3>();
    walkers.Add(new Vector3(5,0,5));

    walker.z += 10;
    walkers[0].z += 10;
}

}

Dlaczego walker.z += 10; działa, ale nie walkers[0].z += 10;?

Jak mogę to działać?

0
LuckyPotatoe 16 styczeń 2020, 13:35

1 odpowiedź

Najlepsza odpowiedź

Dlaczego Walker.Z + = 10; działa, ale nie Walkers [0] .Z + = 10;

Ponieważ Vector3 nie jest class, ale struct !

Tak więc, gdy walker bezpośrednio przytrzymuje dostęp struct, a dostęp w walkers[0] W rzeczywistości zwraca nową kopię tego Vector3, więc nie można bezpośrednio zmienić wartości swoich składników.

Wolaj albo masz zamiar przechowywać struct w zmiennej / polu, zanim będzie można zmienić wartości swoich komponentów

var vector = walkers[0];
vector.z += 10;
walkers[0] = vector;

Lub możesz zamiast tego dodać pełne Vector3 do tego

walkers[0] += Vector3.forward * 10;
// equivalent to
walkers[0] += new Vector3(0, 0, 1) * 10;
1
derHugo 16 styczeń 2020, 10:59