Может ли массив Unity GameObject использоваться для эмуляции поведения, подобного ToggleGroup? - PullRequest
0 голосов
/ 03 октября 2019

В этом приложении есть панели с коллекциями кнопок, которые на «Play» отключены. Цель состоит в том, чтобы использовать массив GameOject для управления этими кнопками, чтобы за один раз можно было включить только одну кнопку. В ToggleGroup можно принудительно выбрать только один объект Toggle в любое время.

Несмотря на рост в навыках Unity c #, я с готовностью признаю, что являюсь скорее начинающим, чем промежуточным в навыках. Таким образом, любые рекомендации наиболее ценны.

Первым шагом было тестирование использования ToggleGroups, но Toggles не может принять скрипт c #, связанный с кнопками, который, когда включен, загружает Prefab из AssetBundle.

После того, как ToggleGroups были сняты со стола, я начал исследовать использование массива GameObjects. В нескольких источниках показано, как в упрощенном виде создать массив кнопок и после запуска () сделать кнопки неактивными. Но мне неясно, как эмулировать функциональность ToggleGroup в массиве.

Вот база моего скрипта "buttonMgtArray"

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class buttonMgtArray : MonoBehaviour
{

    public GameObject[] button;

    // Start is called before the first frame update
    void Start()
    {
        button[0].SetActive(false);
        button[1].SetActive(false);
        button[2].SetActive(false);
    }

}

В настоящее время нет ошибок, потому что я пытаюсьчтобы определить, как имитировать желаемое поведение в контексте массива GameObject.

Чтобы лучше проиллюстрировать поведение, которое я пытаюсь вызвать, этот скриншот может помочь объяснить цель.

КнопкаПоведение Объяснение

Мне очень приятно сообщить, что у @Stanley было очень элегантное решение, обеспечивающее эмуляцию переключения. Ключ должен был применить скрипт к кнопке, которая включала скрытую кнопку, которые являются ссылками массива. Вот окончательный код. Большое спасибо @ Stanley

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class buttonMgtArray : MonoBehaviour
{
    public GameObject[] buttonArray;

    public void DisableAllButtonsExcept(int i)
    {
        foreach (GameObject buttonGameObject in buttonArray)
        {
            buttonGameObject.SetActive(false);
        }
        buttonArray[i].SetActive(true);
    }

}

1 Ответ

0 голосов
/ 03 октября 2019

Если я правильно вас понимаю, вы хотите использовать свои кнопки, как переключатели. Я вижу, что никто еще не ответил на ваш вопрос, поэтому я быстро его опробую.

Есть и другие, и лучшие способы, но этот работает.

public void DisableAllButtonsExcept(int i) {
    foreach(GameObject buttonGameObject in buttonArray) {
        buttonGameObject.SetActive(false);
    }
    buttonArray[i].SetActive(true);
}

до Before running code


после After running code

Кнопка № 2 сохраняется, потому что массивы начинаются с 0

enter image description here

изменяют параметры вСобытие onClick для соответствия его позиции в массиве

...