Всем привет. У меня есть, допустим, 5 скриптов (все кроме одного отключены) и мне нужно, чтобы на колесико мыши отключался рабочий скрипт и включался следующий. Чтобы это сделать, я решил использовать массив, но я не знаю какой тип массива нужно поставить. Если массив из скриптов сделать не возможно, то как мне реализовать смену рабочего скрипта?
Все "скрипты" наследуются от 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;
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости