Как выцветать текст в Unity
Привет, я пытаюсь заставить мой GUI исчезать, когда он не используется. В частности, для панели инструментов в стиле Minecraft я хочу, чтобы она появлялась, когда игрок использовал колесо прокрутки, и исчезала через несколько секунд после завершения прокрутки. Графический интерфейс работает отлично, но я не могу заставить эту затухающую вещь работать. Я полагаю, что после того, как текст выбора заработает, спрайты будут следовать легко, поэтому сейчас я просто расскажу о тексте выбора. Инвентаризационный текст запускает игру в полном белом цвете.
protected void OnGUI()
{
if (isInvGUIDirty)
{
// Update selection text
controllerInterface.inventoryText.CrossFadeAlpha(255f, 0, false);
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);
^ В результате (когда я перемещаю колесо прокрутки) текст инвентаря становится полностью белым, а через две секунды становится светло-серым. Нет гладкого перехода, и он все еще хорошо виден. Это повторяется каждый раз, когда я перемещаю колесо прокрутки.
controllerInterface.inventoryText.CrossFadeAlpha(255f, 0, false);
controllerInterface.inventoryText.CrossFadeAlpha(0f, 2, false);
^ Это приводит (когда я перемещаю колесо прокрутки) в тексте инвентаря становится полностью белым, а через две секунды становится невидимым. Это повторяется каждый раз, когда я перемещаю колесо прокрутки. Видимо, 0,1 альфа имеет все значение о_О
controllerInterface.inventoryText.color = Color.white;
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);
^ Это приводит к тому, что текст инвентаря медленно исчезает до светло-серого, но не изменяется на колесе прокрутки.
Любые идеи о том, почему CrossFadeAlpha() не работает, как ожидалось?
1 ответ
Извините, я не получал обновления по электронной почте отсюда:/. Так что я закончил тем, что сработал, чтобы написать собственный сопрограмму на самом базовом уровне, который, казалось, работал... по какой-то причине. Честно говоря, не уверен, почему предыдущий не сработал. Это действует на CanvasGroup вместо отдельных элементов тоже.
private void FadeInventoryGroup(float alpha, float delay)
{
if (fader != null)
StopCoroutine(fader);
fader = StartCoroutine(EFadeOutInventory(alpha, delay));
}
private IEnumerator EFadeOutInventory(float alpha, float delay)
{
yield return new WaitForSeconds(delay);
float progress = 1f - Mathf.Abs(inventoryGroup.alpha - alpha);
float start = inventoryGroup.alpha;
while (progress < 1f)
{
progress += Time.deltaTime;
inventoryGroup.alpha = Mathf.Lerp(start, alpha, progress);
yield return 0;
}
}