2015-02-27 4 views
0

У меня есть пользовательский интерфейс Panel, содержащий Button в детстве. Кнопка имеет скрипт как компонент. Сценарий выглядит следующим образом:Скрытие панели пользовательского интерфейса из сценария в единстве

public GameObject Panel ; 
OnMouseDown() 
{ 
    Panel.setActive(false); 

    StartCoroutine(takeShot()); 
} 
private IEnumerator takeShot() 
{ 
    Application.CaptureScreenshot("my_img.png"); 
} 

У меня возникли проблемы с сообщением, что сопрограмма не может быть запущена, потому что кнопка неактивна.

Как исправить эту проблему? Можно ли скрыть панель без использования SetActive(false)?

ответ

1

Да, я предполагаю, что вы используете последнюю версию единства.

Вы должны использовать canvas groups. Прикрепите группу холста к вашему родительскому объекту, panel, в своем коде, войдите в canvas groupcomponent и установите его alpha в 0, независимо от вашего триггера. Это скрывает элемент canvas и все его дети, но все еще активен в сцене. Снова установите его на 1, чтобы он снова стал видимым. К сожалению, вы все равно сможете взаимодействовать с ним, поскольку он по-прежнему технически находится на сцене, поэтому вы можете решить это, используя Renderer.enabled и слишком устаревшим. Это обновляет его, но не рисует. SetActive останавливает его вообще.

Надеюсь, что это прояснит ситуацию.

+0

я бродила, если группа холста должна быть назначена только родитель или родителей и детей в качестве компонента, но, как у только что сказал, что это должно быть дано только для родителя, и по умолчанию всех детей будут подвержен влиянию . я попробую это решение :) спасибо – Sora

Смежные вопросы