Переключател из 4 кнопок

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

Переключател из 4 кнопок

Сообщение e-x 05 мар 2023, 23:00

Добрый День!
Хочу сделать переключатель, при нажатии одной кнопки из 4 все остальные 3 = false.
Думал очень просто оказалось не так.
Итого имеем четыре объекта!
На каждом объекте висит скрипт, по событию OnMouseDown есть переменная булевая trigger, тоесть каждый объект может быть либо тру либо фалсе.
Пока все понятно, кликаю на объект он либо тру либо фалсе.
Собрал все переменные trigger в массив и повесил на пустышку.
Сделал функцию в главном скрипте и вызваю ее с скриптов кнопок.
Итого скрипт на кнопках.

Синтаксис:
Используется csharp
public void OnMouseDown()
        {
            trigger = !trigger;
            buttonColourCheck.CheckColourButton();

        }
 


скрипт на пустышке

Синтаксис:
Используется csharp
 public void CheckColourButton()
        {
            for (int i = 0; i < buttonColour.Length; i++)
            {

                if (buttonColour[i].trigger == true)
                {

                }
            }
        }
 


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

Re: Переключател из 4 кнопок

Сообщение waruiyume 05 мар 2023, 23:59

Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;

public class Switchbox : MonoBehaviour
{
    public List<CustomButton> buttons;

    public int ActiveFlagId => buttons.FindIndex(b => b.IsActive);

    void Start()
    {
        CustomButton.EOnPress += OnButtonPress;
        Debug.Log(ActiveFlagId);
    }

    void OnDestroy()
    {
        CustomButton.EOnPress -= OnButtonPress;
    }

    private void OnButtonPress(CustomButton but)
    {
        foreach (var b in buttons)
            b.IsActive = b == but;

        Debug.Log(ActiveFlagId);
    }
}


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

public class CustomButton : MonoBehaviour
{
    public static event Action<CustomButton> EOnPress;

    private bool isActive;
    public bool IsActive
    {
        get => isActive;
        set
        {
            isActive = value;
            SetActiveFX(value);
        }
    }

    public void OnMouseDown()
    {
        EOnPress?.Invoke(this);
    }

    private void SetActiveFX(bool a)
    {
        GetComponent<Renderer>().material.color = a ? Color.green : Color.white;
    }
}
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону


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

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

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