Unity c#, массив со скриптами

160
05 июня 2021, 09:00

Всем привет. У меня есть, допустим, 5 скриптов (все кроме одного отключены) и мне нужно, чтобы на колесико мыши отключался рабочий скрипт и включался следующий. Чтобы это сделать, я решил использовать массив, но я не знаю какой тип массива нужно поставить. Если массив из скриптов сделать не возможно, то как мне реализовать смену рабочего скрипта?

Answer 1

Все "скрипты" наследуются от MonoBehaviour, так что мы можем хранить массив ссылок на этот класс. Поменять активный элемент с помощью мыши - тривиальная задача через Input.GetAxis. Единственная проблема - отлавливать случай, когда массив компонентов пустой или когда в массиве все элементы выключены - вопрос не об этом, так что с этим вопросом сами как-нибудь справитесь.

public class ActivateComponentByMouseWheel : MonoBehaviour {
    [SerializeField]
    MonoBehaviour[] components;
    [SerializeField, HideInInspector]
    int activeIndex = -1;
    void Update() {
        float mouseWheelInput = Input.GetAxis("Mouse ScrollWheel");
        if(mouseWheelInput > 0) {
            SetNextActiveComponent(activeIndex + 1);
        }
        else if(mouseWheelInput < 0) {
            SetNextActiveComponent(activeIndex - 1);
        }
    }
    // Проверяем на уровне редактора, что в массиве компонентов только 1 компонент активен
    // Также сохраняем индекс этого компонента
    void OnValidate() {
        int i;
        for(i = 0; i < components.Length; i++) {
            if (components[i].enabled) {
                activeIndex = i;
                break;
            }
        }
        for(i += 1; i < components.Length; i++) {
            components[i].enabled = false;
        }
    }
    void SetNextActiveComponent(int nextIndex) {
        // проверяем граничные индексы
        if(nextIndex >= components.Length) {
            nextIndex = 0;
        }
        else if(nextIndex <= 0) {
            nextIndex = components.Length - 1;
        }
        // отключаем текущий компонент
        components[activeIndex].enabled = false;
        // включаем следующий компонент
        components[activeIndex = nextIndex].enabled = true;
    }
}
READ ALSO
Как избавится от дублирования в JOIN

Как избавится от дублирования в JOIN

Всем привет! У меня есть 4 таблицы

108
проблема с установкой composer

проблема с установкой composer

помогите пожалуйста решить проблемуУстанавливаю composer по гайду с digitalOcean установка просто висит, ничего не происходит

105
Получение данных из mysql в php

Получение данных из mysql в php

Пишу программу на C++, есть работа с PhP частью Нужно вывести число из Базы ДанныхПри корректном подключении идёт такое окно:

90
Вывод изображений при помощи плагина ACF Photo Gallery Field (WordPress)

Вывод изображений при помощи плагина ACF Photo Gallery Field (WordPress)

У каждой записи должна быть возможность добавлять галерею из картинокНашла как вариант плагин ACF Photo Gallery Field, вывожу вот таким образом, однако...

97