Я хочу добавить эффекты Fade In и Fade Out к своим кнопкам пользовательского интерфейса в Unity5, но CrossFadeAlpha и CrossFadeColor не работают с кнопками. Есть ли альтернатива достижению fadein и fadeout эффекта кнопки пользовательского интерфейса в единстве.FadeIn fadeOut Кнопка UI в единстве 5
ответ
Надеюсь, этот пример поможет вам, нажмите кнопку, когда экран будет затемнен медленно медленно. Если вы хотите сделать FadeIn установить canvas.alpha
значения сначала 0 и увеличить значение
Select Canvas Иерархия панель и добавление класса выцветанию затем кнопка DragAndDrop OnClick и установите функцию не FadeIt
public class Fade : MonoBehaviour
{
public void FadeIt()
{
StartCoroutine(DoFade());
}
IEnumerator DoFade()
{
CanvasGroup canvasG = GetComponent<CanvasGroup>();
While (canvasG.alpha > 0)
{
canvasG.alpha -= Time.deltaTime/2 ; // optinal parameters 2 ,3 ,5
yield return null;
}
}
}
Там будет не построена в пути сделайте это, но вы можете реализовать свой собственный метод выполнения этого. Получите компоненты и Text
с вашего Button
, затем воспользуйтесь сопрограммой для изменения альфы их цветов с течением времени.
IEnumerator fadeButton(Button button, bool fadeIn, float duration)
{
float counter = 0f;
//Set Values depending on if fadeIn or fadeOut
float a, b;
if (fadeIn)
{
a = 0;
b = 1;
}
else
{
a = 1;
b = 0;
}
Image buttonImage = button.GetComponent<Image>();
Text buttonText = button.GetComponentInChildren<Text>();
//Enable both Button, Image and Text components
if (!button.enabled)
button.enabled = true;
if (!buttonImage.enabled)
buttonImage.enabled = true;
if (!buttonText.enabled)
buttonText.enabled = true;
//For Button None or ColorTint mode
Color buttonColor = buttonImage.color;
Color textColor = buttonText.color;
//For Button SpriteSwap mode
ColorBlock colorBlock = button.colors;
//Do the actual fading
while (counter < duration)
{
counter += Time.deltaTime;
float alpha = Mathf.Lerp(a, b, counter/duration);
//Debug.Log(alpha);
if (button.transition == Selectable.Transition.None || button.transition == Selectable.Transition.ColorTint)
{
buttonImage.color = new Color(buttonColor.r, buttonColor.g, buttonColor.b, alpha);//Fade Traget Image
buttonText.color = new Color(textColor.r, textColor.g, textColor.b, alpha);//Fade Text
}
else if (button.transition == Selectable.Transition.SpriteSwap)
{
////Fade All Transition Images
colorBlock.normalColor = new Color(colorBlock.normalColor.r, colorBlock.normalColor.g, colorBlock.normalColor.b, alpha);
colorBlock.pressedColor = new Color(colorBlock.pressedColor.r, colorBlock.pressedColor.g, colorBlock.pressedColor.b, alpha);
colorBlock.highlightedColor = new Color(colorBlock.highlightedColor.r, colorBlock.highlightedColor.g, colorBlock.highlightedColor.b, alpha);
colorBlock.disabledColor = new Color(colorBlock.disabledColor.r, colorBlock.disabledColor.g, colorBlock.disabledColor.b, alpha);
button.colors = colorBlock; //Assign the colors back to the Button
buttonImage.color = new Color(buttonColor.r, buttonColor.g, buttonColor.b, alpha);//Fade Traget Image
buttonText.color = new Color(textColor.r, textColor.g, textColor.b, alpha);//Fade Text
}
else
{
Debug.LogError("Button Transition Type not Supported");
}
yield return null;
}
if (!fadeIn)
{
//Disable both Button, Image and Text components
buttonImage.enabled = false;
buttonText.enabled = false;
button.enabled = false;
}
}
Использование:
public Button button;
выцветанию вButton
в 3
секунд
StartCoroutine(fadeButton(button, true, 3));
исчезать изButton
в 3
секунд
StartCoroutine(fadeButton(button, false, 3));
Использование LeanTween которым является эффективным Tweening двигателя для Unity3d, загрузите пакет из магазина активов и импорт LeanTween.cs вашей proyect.
Кнопка должна быть холст группы дополнение добавить Проявление или с помощью этого сценария:
myButton.onClick.AddListener(()=>{
LeanTween.alphaCanvas (myButton.GetComponent<CanvasGroup>(), 0f, 0.1f);
});
Off верхней части моей головы, я бы сказал, что вы можете либо создать анимация, которая угасает кнопку (используя альфа-значение) или записывает сопрограмму, которая это делает. – UnholySheep
Вы попробовали ответ, который я оставил? – Programmer
Я использовал изображение с указателем обработчика событий вниз и добавил cross fade alpha. Это сделал то, что я хотел. –