Здравствуйте.
Могу ли я найти все объекты уже входящие в триггер и записать их в массив? Такое не сложно делать если объекты входят и выходят из триггера. При 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); } }
Смотрите также:
Комментарии
Если я правильно понял, ты хочешь добавить в какой-либо массив юнита, который находится в триггере и соответствует некоторым условиям ( в данном случае 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); } }
lehanru, Ну больше имел в виду компонент Layer :)
Тем временем я решил проблему тем что задал триггер в виде тонкой полоски, который поворачивал на 180 градусов (нужно было найти объекты по радиусу). За первый заход посчитал количество объектов через тот же OnTriggerEnter2D и задал размер массива, а за второй заполнил его.
Ваш способ безусловно выглядит красивее и проще, но у меня почему-то делается рандомное количество копий добавляемого объекта в списке. То есть он не делает это бесконечно, а просто случайное количество раз, и нельзя считать что это зацикливание.
В любом случае спасибо. С этим можно разобраться. И будет полезно при более сложных формах триггера, чем окружность.
Возможность добавлять комментарии была ограничена
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]