Как автоматически скрыть панель при нажатии другой кнопки в Unity - PullRequest
0 голосов
/ 21 января 2020

В настоящее время я работаю над AR Solar System для моего последнего года проекта.

Я создал меню с кнопкой из 9 планет. Например, когда я нажимаю кнопку Sun, появляется информационная панель вместе с 3D Sun. И затем, есть кнопка закрытия, чтобы закрыть панель.

Но проблема возникла, когда я нажал все 9 кнопок, 3D и информационная панель перекрывали друг друга, и мне пришлось закрыть ее вручную, используя кнопку закрытия один одним, что довольно неприятно.

enter image description here

Следовательно, есть ли способы автоматического скрытия / закрытия панели при нажатии других кнопок. Обратите внимание, что я новичок в Unity и не очень хорош в кодировании. Я был бы очень признателен, если бы вы могли оставить какие-либо советы.

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Да, это довольно просто!

Например, go для кнопки "Солнце" и для компонента Кнопка вы найдете При нажатии ()

As Follows

Добавьте ( + ) количество объектов GameObject или «панелей», которые вы хотите скрыть при нажатии на другие кнопки.

После того как вы добавите их все, выберите из выпадающего меню справа GameObject.SetActive и убедитесь, что в поле ниже установлено false .

Таким образом, когда вы нажимаете на любую из планет, остальные будут деактивированы.

В качестве альтернативы, вы также можете вызвать метод, который устанавливает альфа этих панелей на 0 и отключить их Raycast, если вы не хотите их деактивировать.

0 голосов
/ 21 января 2020

Нет кода, показывающего нам, как вы открываете окно панели.

Но один из способов добиться того, что вы хотите, - это иметь только одно окно панели, и только изменение текста зависит от предыдущего нажатия. pl anet.

Вот один пример:

public class PlanetDisplayer : MonoBehaviour
{
    private bool isOn = false;

    [SerializeField] private Image planetImage;

    [SerializeField] private Text planetText1;
    [SerializeField] private Text planetText2;

    private void OnClick(Planet planet)
    {
        planetText1.text = planet.MainText;
        planetText2.text = planet.AnotherText;

        if (!isOn)
        {
            isOn = true;
            gameObject.SetActive(true);
        }
    }

    private void OnClose()
    {
        isOn = false;
        gameObject.SetActive(false);
    }
}

Итак, planetText и planetImage являются примерами, как я вижу на вашей картинке, есть некоторые тексты и Я предполагаю картинку для имени.

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

Не забудьте связать личные текстовые переменные (и изображения, если они есть) в инспекторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...