Переключение между тремя объектами

Программирование на Юнити.

Переключение между тремя объектами

Сообщение labinzevvAlex 25 мар 2021, 08:41

Привет Народ! Требуется Ваша помощь:
Нужно осуществить переключение между тремя объектами нажатием одной и той-же клавиши.
переключение между двумя сделал следующим образом:
Синтаксис:
Используется csharp
public GameObject a;
public GameObject b;

public bool select = false;

void Update()
{
   selectedTest();
}

public void selectedTest()
{
       if (Input.GetKey(KeyCode.K))
        {
            select = !select;
            if (select == true)
            {
                a.SetActive(false);
                b.SetActive(true);
                Debug.Log("1");
            }
            else
            {
                a.SetActive(true);
                b.SetActive(false);
                Debug.Log("2");
            }
        }
}
 


А вот как переключаться между тремя объектами (последовательно) Не могу догнать...
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Переключение между тремя объектами

Сообщение TeslaGan 25 мар 2021, 10:00

самое просто: вместо bool ставишь int
if меняешь на
Синтаксис:
Используется csharp
switch (select)
{
case 1: switch = 2;
//первый вкл, третий выкл,
break;
case 2: switch = 3;
//второй вкл, первый выкл,
break;
case 3: switch = 1;
//третий вкл, второй выклб
break;
}

чуть посложнее: помимо int select добавляешь List<GameObject>
и далее чтот тип
Синтаксис:
Используется csharp
ContainerForGO[select].SetActive(false);
select = select== (ContainerForGO.Count-1)?0;select+1;
ContainerForGO[select].SetActive(true);
 

во второй вариант проще добавлять новые объекты
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00

Re: Переключение между тремя объектами

Сообщение Alkos26Rus 25 мар 2021, 12:46

Используй массив объектов и цикл. Так хоть 1000 объектов можешь засунуть и не надо код постоянно править
Синтаксис:
Используется csharp
public GameObject[] objects;
public int current_object;

void Update()
{
   selectedTest();
}

public void selectedTest()
{
       if (Input.GetKey(KeyCode.K))NextObject();
}

public void NextObject()
{
    current_object++;

    if(current_object >= objects.Length)current_object = objects.Length-1;

    for (int i = 0; i < objects.Length; i++)
    {
        if(i == current_object)objects[i].SetActive(true);
        else objects[i].SetActive(false);
    }
}
 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Переключение между тремя объектами

Сообщение Xtir 25 мар 2021, 13:40

Alkos26Rus писал(а):
Синтаксис:
Используется csharp

    for (int i = 0; i < objects.Length; i++)
    {
        if(i == current_object)objects[i].SetActive(true);
        else objects[i].SetActive(false);
    }

 

Бред же
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Переключение между тремя объектами

Сообщение TeslaGan 25 мар 2021, 13:52

Xtir писал(а):Бред же

да ну нет. мы не знаем как у топикстартера объекты переключаются... м.б. ему этот вариант лучше подойдет...
Последний раз редактировалось TeslaGan 25 мар 2021, 14:19, всего редактировалось 1 раз.
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00

Re: Переключение между тремя объектами

Сообщение Alkos26Rus 25 мар 2021, 14:14

Xtir писал(а):
Alkos26Rus писал(а):
Синтаксис:
Используется csharp

    for (int i = 0; i < objects.Length; i++)
    {
        if(i == current_object)objects[i].SetActive(true);
        else objects[i].SetActive(false);
    }

 

Бред же


Бред это вот это
Синтаксис:
Используется csharp
       if (Input.GetKey(KeyCode.K))
        {
            select = !select;
            if (select == true)
            {
                a.SetActive(false);
                b.SetActive(true);
                Debug.Log("1");
            }
            else
            {
                a.SetActive(true);
                b.SetActive(false);
                Debug.Log("2");
            }
        }
 


А тот вариант что я написал нормальный, можно в метод добавить параметр номера объекта и активироваться будет нужный объект. Я направление дал а дальше пусть улучшает под себя. Ты написал бред же, а где по существу коментарий, что именно бред?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Переключение между тремя объектами

Сообщение Xtir 25 мар 2021, 20:41

Alkos26Rus писал(а):Бред это вот это
Синтаксис:
Используется csharp
       if (Input.GetKey(KeyCode.K))
        {
            select = !select;
            if (select == true)
            {
                a.SetActive(false);
                b.SetActive(true);
                Debug.Log("1");
            }
            else
            {
                a.SetActive(true);
                b.SetActive(false);
                Debug.Log("2");
            }
        }
 

Согласен, это
Изображение

А тот вариант что я написал нормальный, можно в метод добавить параметр номера объекта и активироваться будет нужный объект. Я направление дал а дальше пусть улучшает под себя. Ты написал бред же, а где по существу коментарий, что именно бред?


Можно было сделать всё намного проще, без всяких переборов
Синтаксис:
Используется csharp
public void NextObject()
{
    objects[current_object].SetActive(false);
    current_object++;
    objects[current_object].SetActive(true);
}
 
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Переключение между тремя объектами

Сообщение Alkos26Rus 25 мар 2021, 21:48

Можно было сделать всё намного проще, без всяких переборов

Можно и так, все зависит от задач, иногда нужен перебор, мало ли может активно несколько объектов. Не поленился же нашел картинку)
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва


Вернуться в Скрипты

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

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