Триггеры и массивы.
Здравствуйте.
Могу ли я найти все объекты уже входящие в триггер и записать их в массив? Такое не сложно делать если объекты входят и выходят из триггера. При OnTriggerEnter2D объект записывается, а при OnTriggerExit2D удаляется. Но мне бы реализовать запись при OnTriggerStay2D, нужно найти объекты с определённым уровнем или тегом, а затем упорядочить и записать. Единственное что мне пришло в голову это пустить какой нибудь луч в пределах триггера, который проверял бы теги объектов на которые он наткнётся. Если это нормальное решение, то подскажите функции которые могут в этом помочь, если же нет то подскажите в каком направлении можно поискать решение.
Заранее благодарен.

Лучший ответ:
Если я правильно понял, ты хочешь добавить в какой-либо массив юнита, который находится в триггере и соответствует некоторым условиям ( в данном случае tag = "Tag" и lvl = 5) ? Я тут использовал лист, т.к. с ним удобнее работать, но при желании ты можешь юзать статический массив.
» код
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Test : MonoBehaviour {

    public List<GameObject> Units = new List<GameObject>();
    void OnTriggerStay2D(Collider2D col)
    {
        if (col.tag == "Tag" || col.GetComponent<MyComponent>().lvl == 5)
        {
            Units.Add(col.gameObject);
        }
    }



Просмотров: 564

» Лучшие комментарии


lehanru #1 - 1 год назад (отредактировано ) 3

Если я правильно понял, ты хочешь добавить в какой-либо массив юнита, который находится в триггере и соответствует некоторым условиям ( в данном случае tag = "Tag" и lvl = 5) ? Я тут использовал лист, т.к. с ним удобнее работать, но при желании ты можешь юзать статический массив.
» код
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Test : MonoBehaviour {

    public List<GameObject> Units = new List<GameObject>();
    void OnTriggerStay2D(Collider2D col)
    {
        if (col.tag == "Tag" || col.GetComponent<MyComponent>().lvl == 5)
        {
            Units.Add(col.gameObject);
        }
    }
Mangysta #2 - 1 год назад (отредактировано ) 0
lehanru, Ну больше имел в виду компонент Layer :)
Тем временем я решил проблему тем что задал триггер в виде тонкой полоски, который поворачивал на 180 градусов (нужно было найти объекты по радиусу). За первый заход посчитал количество объектов через тот же OnTriggerEnter2D и задал размер массива, а за второй заполнил его.
Ваш способ безусловно выглядит красивее и проще, но у меня почему-то делается рандомное количество копий добавляемого объекта в списке. То есть он не делает это бесконечно, а просто случайное количество раз, и нельзя считать что это зацикливание.
В любом случае спасибо. С этим можно разобраться. И будет полезно при более сложных формах триггера, чем окружность.