Как отловить объект в тригере не по тегу

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как отловить объект в тригере не по тегу

Сообщение e-x 02 окт 2022, 14:03

Есть 30 объектов, все имеют один тег, все проходят через триггер, как отловить например по Gameobject m1;Возможно ли решение без тега?Че я только не писал в If(.....), ошибок нет но не отлавливается объект.Спасибо.

Код
Синтаксис:
Используется csharp
using UnityEngine;

namespace UnityStandardAssets.Utility
{
    public class Move_step : MonoBehaviour
    {
        public GameObject m1;
        public Transform m2;
       
       
        private void OnTriggerStay(Collider m1)
   
        {
            if (m1)
            {
               
               
                Debug.Log("uuu");

               
            }
        }
    }
}

 
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Как отловить объект в тригере не по тегу

Сообщение Saltant 02 окт 2022, 14:37

Чтоб "отловить" тебе нада его как то идентифицировать, вешай на них какой ни будь скрипт и там указывай айди или че нить такое, потом когда объект в триггер заходит бери с него компонент скрипта и смотри переменную.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как отловить объект в тригере не по тегу

Сообщение e-x 02 окт 2022, 16:49

были такие мысли, но решил совета послушать, нацепил "пустой" скрипт и если есть наличие такого скрипта, неважно что в нем , то условие срабатывает))...так корректно?..как то мне кажется не правильно...
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Как отловить объект в тригере не по тегу

Сообщение breNnor- 02 окт 2022, 17:35

e-x писал(а):были такие мысли, но решил совета послушать, нацепил "пустой" скрипт и если есть наличие такого скрипта, неважно что в нем , то условие срабатывает))...так корректно?..как то мне кажется не правильно...


Универсальный вариант. У тебя есть крипт который проверяет объекты, в этот скрипт добавь переменную
Синтаксис:
Используется csharp
public string UniqueName = "ПЕС"

А тот игровой объект который нужно отследить назови уникальным именем "ПЕС".

Синтаксис:
Используется csharp
private void OnTriggerStay(Collider m1)
    {
        if (m1.gameObject.name == UniqueName)
        {
            Debug.Log("СЛОМАТЬ ПСУ НОГУ!");
        }
    }
 


И все будет работать. Тебе ведь написали
Чтоб "отловить" тебе нада его как то идентифицировать
•−−• •−• •• •−− • − −−••−−
Аватара пользователя
breNnor-
UNIт
 
Сообщения: 55
Зарегистрирован: 15 сен 2021, 17:20
Откуда: Тюмень
Skype: Null

Re: Как отловить объект в тригере не по тегу

Сообщение breNnor- 02 окт 2022, 17:38

breNnor- писал(а):
e-x писал(а):были такие мысли, но решил совета послушать, нацепил "пустой" скрипт и если есть наличие такого скрипта, неважно что в нем , то условие срабатывает))...так корректно?..как то мне кажется не правильно...


Универсальный вариант. У тебя есть крипт который проверяет объекты, в этот скрипт добавь переменную
Синтаксис:
Используется csharp
public string UniqueName = "ПЕС"

А тот игровой объект который нужно отследить назови уникальным именем "ПЕС".

Синтаксис:
Используется csharp
private void OnTriggerStay(Collider m1)
    {
        if (m1.gameObject.name == UniqueName)
        {
            Debug.Log("СЛОМАТЬ ПСУ НОГУ!");
        }
    }
 


И все будет работать. Тебе ведь написали
Чтоб "отловить" тебе нада его как то идентифицировать


А если много объектов нужно проверить, сделай массив и цикл foreach и там проверяй имена.
•−−• •−• •• •−− • − −−••−−
Аватара пользователя
breNnor-
UNIт
 
Сообщения: 55
Зарегистрирован: 15 сен 2021, 17:20
Откуда: Тюмень
Skype: Null

Re: Как отловить объект в тригере не по тегу

Сообщение Saltant 02 окт 2022, 17:58

breNnor- писал(а):
e-x писал(а):были такие мысли, но решил совета послушать, нацепил "пустой" скрипт и если есть наличие такого скрипта, неважно что в нем , то условие срабатывает))...так корректно?..как то мне кажется не правильно...


Универсальный вариант. У тебя есть крипт который проверяет объекты, в этот скрипт добавь переменную
Синтаксис:
Используется csharp
public string UniqueName = "ПЕС"

А тот игровой объект который нужно отследить назови уникальным именем "ПЕС".

Синтаксис:
Используется csharp
private void OnTriggerStay(Collider m1)
    {
        if (m1.gameObject.name == UniqueName)
        {
            Debug.Log("СЛОМАТЬ ПСУ НОГУ!");
        }
    }
 


И все будет работать. Тебе ведь написали
Чтоб "отловить" тебе нада его как то идентифицировать

Так не будет работать как ты написал, ты проверяешь имя геймобжекта а не переменную. Чтоб проверить переменную тебе нада геткомпонент скрипта вначале и уже публичную переменную оттуда.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как отловить объект в тригере не по тегу

Сообщение e-x 02 окт 2022, 19:30

объясните уважаемы знатоки) ..зачем мне проверять переменную? если можно просто проверить есть скрипт или нет, я вот у себя сделал, все замечательно работает....есть скрипт = копаем, нет скрипта = не копаем....зачем туда еще переменную пихать? да как правильно то? и зачем собаке ногу ломать, собака друг человека!

Я вот реально не знаю как правильно!Есть какое-то понимание , что надо так и только и вот почему? ...или работает да и х...с ним?
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Как отловить объект в тригере не по тегу

Сообщение breNnor- 02 окт 2022, 19:45

e-x писал(а):объясните уважаемы знатоки) ..зачем мне проверять переменную? если можно просто проверить есть скрипт или нет, я вот у себя сделал, все замечательно работает....есть скрипт = копаем, нет скрипта = не копаем....зачем туда еще переменную пихать? да как правильно то? и зачем собаке ногу ломать, собака друг человека!

Я вот реально не знаю как правильно!Есть какое-то понимание , что надо так и только и вот почему? ...или работает да и х...с ним?


Можешь по подробнее? Что ты вообще пытаешься реализовать.
•−−• •−• •• •−− • − −−••−−
Аватара пользователя
breNnor-
UNIт
 
Сообщения: 55
Зарегистрирован: 15 сен 2021, 17:20
Откуда: Тюмень
Skype: Null

Re: Как отловить объект в тригере не по тегу

Сообщение Saltant 02 окт 2022, 19:45

e-x писал(а):объясните уважаемы знатоки) ..зачем мне проверять переменную? если можно просто проверить есть скрипт или нет, я вот у себя сделал, все замечательно работает....есть скрипт = копаем, нет скрипта = не копаем....зачем туда еще переменную пихать? да как правильно то? и зачем собаке ногу ломать, собака друг человека!

Я вот реально не знаю как правильно!Есть какое-то понимание , что надо так и только и вот почему? ...или работает да и х...с ним?

Потому что инфа 146% что тебе понадобится какая то кастоматизация для данного геймобжекта, по этому как правило всегда делают скрипт, в нем какая то информация об объекте, например ID объекта. Ты можешь проверять и через TryGetComponent, сверяя че выдаст метод true или false, дальше же у тебя "из коробки" уже есть скрипт с дополнительной логикой или информацией. Делай сразу нормально, а тут же 2 кнопки по сути нажать.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как отловить объект в тригере не по тегу

Сообщение jr900 03 окт 2022, 09:59

Saltant правильно написал - скрипт с ID-шником лучший вариант ИМХО.
геймобжект на имя проверять - худший вариант по производительности - тяжелая операция сравнения строк, все рекомендуют не использовать это вообще.
Скачать бесплатно ассеты для Unity
Скачать ассеты для Unreal Engine 4 / 5
Скачать 3d-модели для игр и дизайна
Персонажи DAZ-Poser для игр
jr900
UNIт
 
Сообщения: 83
Зарегистрирован: 16 апр 2016, 10:13

Re: Как отловить объект в тригере не по тегу

Сообщение e-x 03 окт 2022, 15:43

Нифига у меня чето по переменной не выходит по переменной отловить(((...по скрипту ДА по переменной НЕТ.

Итого, сделал скрипт Id_73

в нем создал только одну переменную

Синтаксис:
Используется csharp
public class Id_73 : MonoBehaviour
    {
        public bool inZone = true;
    }


далее скрипт на тригере

Синтаксис:
Используется csharp
void OnTriggerEnter(Collider other)
        {
            if (other.GetComponent<Id_73>().inZone == true)

            {
                Debug.Log("Gravity");
            }

        }
 


ошибок нет, запускаю юнити, ошибка нулреференс и указывает на эту строчку
if (other.GetComponent<Id_73>().inZone == true)

(((((((
Что не так, казалось бы такое простое и не але))


Можешь по подробнее? Что ты вообще пытаешься реализовать.

есть 100 кубов,все одинаковые, у всех уже есть тег(для другого кода), у всех один, все проходят через тригер, надо отловить те что мне нужны (которые я пометил заранее), так как тег уже применен то варик с тегом отпадает, да и интересно реализовать без тега.Все работает если ловить по наличию скрипта на объекте, но бывалые пишут что это мудизм, ок возможно,согласен, покажите плиз пример кода.
Спасибо!
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Как отловить объект в тригере не по тегу

Сообщение Saltant 03 окт 2022, 15:59

Создаешь скрипт с названием CubeEntity, в него добавляешь переменную private bool isInZone; далее свойство public bool IsInZone => isInZone;
Далее тебе нужно как то переключать переменную когда куб в зоне или нет, создай метод public void SwitchZoneStatus(bool isInZone) => this.isInZone = isInZone;
Так же чтоб различать кубы, создай переменную private int cubeId; и метод public void SetCubeId(int cubeId) => this.cubeId = cubeId;

При создании кубика (после instantiate) забирай с него скрипт CubeEntity (через GetComponent) и вызывай методы SetCubeId(какое то айди);
Когда объект входит в зону триггера так же забирай с него скрипт CubeEntity и меняй переменную isInZone через вызов метода SwitchZoneStatus(true). Когда объект выходит из зоны, соответственно вызывай SwitchZoneStatus(false).

Соответственно чтоб проверить в зоне куб или нет, нужно взять с него скрипт CubeEntity и проверить что вернет свойство IsInZone, если true знач куб в зоне, если false то знач вышел из зоны.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как отловить объект в тригере не по тегу

Сообщение e-x 03 окт 2022, 16:48

Я вот три раза перечитал половину понял половину, нет))(я еще только учусь))). Я хочу понять следующее.
Смотрите,давайте опустим переменные переключение тригер, не тригер, выход с тригера, стоять в тригере это все будет потом.
Для того чтобы отловить куб нужно создать индекс, идентификатор.
Я создал скрипт Id_73 , в скрипте создал переменную, заменим булевую например на int.

public int cubeId = 5;

все мой идентификатор скрипт с переменной cubeId = 5;

Верно?

далее пишу на тригере

void OnTriggerEnter(Collider other)
{
if (other.GetComponent<Id_73>().cubeId ==5 )


тоесть если вошел объект со скриптом id_73 и переменной cubeid ==5 то далее чтото....
почему ошибка нулреференс, что не так то?
Спасибо!
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Как отловить объект в тригере не по тегу

Сообщение breNnor- 03 окт 2022, 18:24

e-x писал(а):Я вот три раза перечитал половину понял половину, нет))(я еще только учусь))). Я хочу понять следующее.
Смотрите,давайте опустим переменные переключение тригер, не тригер, выход с тригера, стоять в тригере это все будет потом.
Для того чтобы отловить куб нужно создать индекс, идентификатор.
Я создал скрипт Id_73 , в скрипте создал переменную, заменим булевую например на int.

public int cubeId = 5;

все мой идентификатор скрипт с переменной cubeId = 5;

Верно?

далее пишу на тригере

void OnTriggerEnter(Collider other)
{
if (other.GetComponent<Id_73>().cubeId ==5 )


тоесть если вошел объект со скриптом id_73 и переменной cubeid ==5 то далее чтото....
почему ошибка нулреференс, что не так то?
Спасибо!


Видимо скрипт на куб не повешал. и Триггер не может получить Id_73.
У тебя там написано на какую строку кода выкидывается ошибка, на ошибку нажми 2 раза и перекинет тебя в визуалку.
•−−• •−• •• •−− • − −−••−−
Аватара пользователя
breNnor-
UNIт
 
Сообщения: 55
Зарегистрирован: 15 сен 2021, 17:20
Откуда: Тюмень
Skype: Null

Re: Как отловить объект в тригере не по тегу

Сообщение e-x 03 окт 2022, 20:00

Да висит на кубе скрипт
Ошибка нулрефренес

if (other.gameObject.GetComponent<Id_73>().cubeId == 5)

сюда кидает, и как понять что не так?(((((((
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26