Как добавить позиции GameObjects в список трансформации - PullRequest
0 голосов
/ 08 января 2019

Я новичок в единстве, надеюсь, кто-то может помочь мне здесь. У меня есть несколько кнопок с тегом BtnCharacter, и я хочу найти их и добавить их положение в список преобразования. Я думаю, это может быть так:

public class Line : MonoBehaviour
{
public List<Transform> SaveList;
    void Start()
    {
        SaveList.Add(GameObject.FindGameObjectsWithTag("BtnCharacter").transform.position);
    }
}

Но Отладчик показывает это:

Ошибка CS1061: «System.Array» не содержит определения «transform» и не найден метод расширения «transform», принимающий первый аргумент типа «System.Array» (вы пропустили директиву using или ссылка на сборку?) (CS1061) (Assembly-CSharp)

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Во-первых, вам действительно нужен общий список для него, я имею в виду, что простой массив тоже будет работать. В любом случае эти решения должны помочь -

1) Использование общего списка GameObject

public class Line : MonoBehaviour
{
    public List<GameObject> SaveList;
    void Start()
    {
        SaveList = new List<GameObject>(GameObject.FindGameObjectsWithTag("BtnCharacter"));
    }
}

2) Использование общего списка Transform / Vector3:

В этом первом методе для доступа к позиции вам нужно добавить дополнительный .transform.position.

В этом решении вы сможете создать общий список Transform / Vector3 для хранения преобразований / позиции. Если вам нужно сохранить преобразования, то создайте список преобразований, иначе создайте список Vector3, вот код для него-

public class Line : MonoBehaviour
{
    public List<Vector3> SaveList;//use List<Transform> to create transform list
    void Start()
    {
        SaveList = new List<Vector3>();
        GameObject[] objectsWithTag = GameObject.FindGameObjectsWithTag("BtnCharacter");
        foreach(GameObject GO in objectsWithTag){
            SaveList.Add(GO.transform.position);//use GO.transform to add the transform in the list
        }
    }
}

3) Использовать сам массив , проще всего, я думаю

public class Line : MonoBehaviour
{
    public GameObject[] SaveArray;
    void Start()
    {
        SaveArray = GameObject.FindGameObjectsWithTag("BtnCharacter");
    }
}

В третьем решении, если вы хотите сохранить вектор 3 или преобразовать массив, попробуйте использовать методы, которые я использовал во втором решении, я мог бы также набрать код для него, но я хочу, чтобы вы попробовали его сами, чтобы лучше понять. Надеюсь, этот ответ поможет:)

И да, ДОКУМЕНТАЦИЯ СУЩЕСТВУЕТ , поэтому поиск в Google, поиск или чтение документации действительно помогут вам доверять мне:)

0 голосов
/ 08 января 2019

GameObject.FindGameObjectsWithTag метод получает все объекты с данным тегом в виде массива. Ваш SaveList - это список Transform, вы пытаетесь добавить массив в список.

Это должно быть похоже;

Transform[] array = GameObject.FindGameObjectsWithTag("BtnCharacter");
foreach(var item in array)
{
   SaveList.Add(item.transform);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...