0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 4
1

Код для проверки переменной скрипта другого объекта через коллайдер

29.10.2018, 08:11. Показов 3461. Ответов 7
Метки c# (Все метки)

Здравствуйте, впервые на вашем форуме, что да как не знаю, надеюсь сделал все правильно.
Такая проблема: Пытаюсь написать игру, и мне нужно чтобы объект удалялся если выполняется условие. Условием нужно сделать совпадение определенной переменной в скриптах всех других объектов, чей коллайдер пересекается с данным, а именно чтобы эта переменная равнялась определенному числу, но как это сделать не совсем понимаю. На данный момент код выглядит так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
    private void Update()
    {
        stother = GameObject.Find("Cube2").GetComponent<SfC>().st;
        if (st == 1)
            GetComponent<Renderer>().material.color = Color.green;
        if (st == 2)
            GetComponent<Renderer>().material.color = Color.black;
        if (st == 3)
            GetComponent<Renderer>().material.color = Color.yellow;
        if (st == 2 && stother == 2)
            Destroy(gameObject);
        }
Проблема еще в том, что нужно чтобы он проверял именно все коллайдеры, а не заданные.

Добавлено через 32 минуты
Либо подскажите иной способ, который даст добиться этого не через коллайдер.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2018, 08:11
Ответы с готовыми решениями:

Использование переменной из другого скрипта
есть 2 скрипта, в первом содержится переменная hp, нужно сделать чтобы во втором переменная death...

Изменение переменной другого скрипта
Только начинаю осваивать Unity, знаю что тема поднималась неоднократно, но до меня так и не дошло...

Как обратиться к переменной из другого скрипта?
public class heroScript : MonoBehaviour { public int score = 20; } Обращаюсь: public int...

Запуск скрипта для анализа папки и запуска другого скрипта
Мне нужно написать скрипт, который каждую секунду (или 5 сек) сканировал определенную папку на...

7
228 / 206 / 92
Регистрация: 26.10.2012
Сообщений: 616
31.10.2018, 08:53 2
См OnCollisionEnter, OnCollisionExit.
Эти методы вызываются при попадании физического тела в коллайдер текущего объекта и при выходе из коллайдера.
1
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 4
31.10.2018, 14:14  [ТС] 3
Допустим, но это не решает моей проблемы, мне нужно чтобы он находил переменные в скрипте объектов, находящихся в его коллайдере, и не только тех, что заданны, а проверял у всех. И нужно чтобы это работало с любым количеством объектов.
В моем случае вообще так:
У меня есть ряд из 3 кубов, и когда игрок заходит в коллайдер одного из кубов, значение одной из переменных в скрипте этого куба меняется, и мне нужно, чтобы когда переменная всех трех кубов будет равна определенному значению, чтобы они удалились, при этом на них висит один и тот же скрипт. Да, в код можно задать 3 разных имени кубов, но что если нужно 5 кубов? Или 10? а может и все 20? Пробовал ввести объект по тегу и по названию(назвав все кубы одним именем), типа мол "Вдруг будет все сравнивать", но такого не вышло, он берет первый объект из списка объектов с таким тегом ("именем"), и поэтому если изменить значение этого первого объекта, он, и только он, удалится.
0
2216 / 1417 / 822
Регистрация: 26.10.2018
Сообщений: 4,071
31.10.2018, 15:01 4
Должен быть один контролирующий скрипт с массивом кубов, который будет чекать на совпадение чисел, делаешься это просто - под пустышку на сцене кидаем все свои кубы, массив получаем простым пробегом по детишкам в foreach.
C#
1
2
3
4
foreach (Transform child in parent)
{
    // Тут сравниваем и что-то делаем
}
Меняем переменную при заходе в коллайдер к примеру так:
C#
1
2
3
4
void OnCollisionEnter(Collision collision)
{
    collision.gameObject.GetComponent<Script>().variable = 1;
}
1
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 4
31.10.2018, 15:22  [ТС] 5
А как примерно сравнивать? Какими командами? Просто я новичок, и про это еще мало знаю.
0
2216 / 1417 / 822
Регистрация: 26.10.2018
Сообщений: 4,071
31.10.2018, 15:45 6
Оператор == подойдет?))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool EqualsVariable(Transform parent)
{
    int variable = parent.GetChild(0).GetComponent<Script>().variable;
 
    foreach (Transform child in parent)
    {
        if (child.GetComponent<Script>().variable != variable)
        {
            return false;
        }
    }
 
    return true;
}
1
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 4
31.10.2018, 17:04  [ТС] 7
Родителем поставил платформу, Код ей вписал, внес поправки на Скрипт и переменную, но не срабатывает, в чем может быть проблема? Переменная публичная.
У детей, кубов, поставил проверку переменной родителя, но переменная родителя не меняется, из-за чего не идет процесс уничтожения кубов.
0
Миниатюры
Код для проверки переменной скрипта другого объекта через коллайдер  
Изображения
 
2216 / 1417 / 822
Регистрация: 26.10.2018
Сообщений: 4,071
31.10.2018, 17:09 8
Могу только гадать на кофейной гуще, тут нужно на сам проект глянуть.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2018, 17:09

Обращение к переменной из другого объекта
private GameObject adfasf; adfasf = GameObject.Find(&quot;MedBox1&quot;); Item NewVarTest =...

Узнать, является ли объект переменной другого объекта
Здравствуйте! На самом деле вопрос посложнее: Предположим, есть объект &quot;MyObject&quot; типа &quot;TMyClass&quot;....

Удочерение объекта при попадании в Коллайдер
Моя задумка:- Если коллайдер одного объекта соприкасается с коллайдером другого ( Под тегом Item)...

Можно ли вызвать метод одного объекта через метод другого объекта?
Мне нужно сделать так, чтобы при вызове метода OnMouseDown() Первого объекта вызывался метод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.