Как добавить свойства класса в список? - PullRequest
0 голосов
/ 19 июня 2019

В MainClass у меня есть:

public List<TransformData> matrices1 = new List<TransformData>();
public Vector3 scaleVector = 1f;

В классе TransformData у меня есть:

public class TransformData 
{
    public Vector3 position;
    public Quaternion rotation;
    public Vector3 scale;
}

Вернувшись в MainClass, я хочу добавить информацию из TransformData в переменную matrices1. Как вы делаете это правильно? У меня есть -

matrices1.Add(TransformData.(TransformData.position, TransformData.rotation, scaleVector));

Это дает мне ошибки. Я видел другие вопросы StackOverflow по этому поводу, но я не могу понять это правильно

Ответы [ 3 ]

2 голосов
/ 19 июня 2019

Вот, пожалуйста, сэр:

TransformData td = new TransformData();
matrices1.add(td);

Если вы хотите добавить параметры прямо при объявлении, добавьте конструктор в ваш класс TransformData.

public class TransformData 
{
    public Vector3 position;
    public Quaternion rotation;
    public Vector3 scale;

    public TransformData(){}

    public TransformData(Vector3 pos, Quaternion  rot, Vector3  sc)
    {
      position = pos;
      rotation = rot;
      scale = sc;
    }
}

, а затемВы можете сделать это, как вы сделали в своем коде.

matrices1.add(new Transformdata(somepos, somerotation, somevector));
1 голос
/ 19 июня 2019

Вы должны дать ему конструктор, подобный

// In order to be able to actually save that list this class has to be
// Serializable!
// Another nice side effect is that from now you can also adjust the values
// from the Inspector of the MonoBehaviour using such an instance or list
[Serializable]
public class TransformData 
{
    public Vector3 position;
    public Quaternion rotation;
    public Vector3 scale;

    // Serialization always needs a default constructor 
    // doesn't have to do anything but can
    public TransformData() 
    {
        // scale should be 1,1,1 by default
        // The other two can keep their default values
        scale = Vector3.one;
    }

    public TransformData(Vector3 pos, Quaternion rot, Vector3 scal)
    {
        position = pos;
        rotation = rot;
        scale = scal;
    }
}

, а затем сделать, например,

// this is a vector not a float!
public Vector3 scaleVector = Vector3.one;

private void Start()
{
    // I guess you wanted to add the data for some transform component
    matrices1.Add(new TransformData(transform.position, transform.rotation, Vector3.one));
}

Обратите внимание, что Add нельзя использовать вне метода.


Если вы предпочитаете напрямую инициализировать свой список с добавлением некоторых элементов, вы можете сделать следующее:

public List<TransformData> matrices1 = new List<TransformData>()
{
    new TransformData(somePosition, someRotation, scaleVector);
};

, если somePosition и someRotation, например, также являются значениями, которые выполучить от инспектора.Вы не можете использовать transform.position и т. Д. Вне метода.

1 голос
/ 19 июня 2019

Вам необходимо добавить переменную или ссылку на объект, содержащий данные:

TransformData myObj = new TransformData();
myObj.position = //populate it here
myObj.rotation = //populate it here
myObj.scale = //populate it here

, а затем добавить его в список:

matrices1.Add(myObj);

Если у вас есть этот объект где-то ещеуже создан, затем просто добавьте переменную, в которой он содержится.

То, что вы видели в Переполнении стека, которое похоже на строку, опубликованную в вопросе, вероятно, таково:

matrices1.Add(new TransformData(){ 
     position = //something,
     rotation = //something,
     scale = //something
});

Чтосоздание нового объекта, а также добавление его в список.

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