Доброго времени суток.
Имеется кнопка и окно. При нажатии на кнопку окно меняет свою прозрачность. Как сделать так, чтобы изменение степени прозрачности было плавным?
public GameObject AlphaObj;
public Image AlphaImage;
private int AlphaCheck = 0;
void Update()
{
AlphaImage = AlphaObj.GetComponent<Image>();
}
public void OpenClose()
{
if (AlphaCheck == 0)
{
AlphaImage.color = new Color(AlphaImage.color.r, AlphaImage.color.g, AlphaImage.color.b, AlphaImage.color.a + 1.0f);
AlphaCheck = 1;
}
else
{
AlphaImage.color = new Color(AlphaImage.color.r, AlphaImage.color.g, AlphaImage.color.b, AlphaImage.color.a - 1.0f);
AlphaCheck = 0;
}
}
Как вариант, могу запихнуть смену прозрачности в Update с добавлением Time.deltaTime, а в OpenClose оставить смену проверочного значения. Но, быть может, есть вариант без перегрузки такой мелочью Update'а.
AlphaImage = AlphaObj.GetComponent<Image>(); сильно влияет на производительность если делать это не в Start() или Awake(). И тем более это безсмысленно делать на каждом кадре в апдейте.Для твоей задачи я советую использовать библиотеку LeanTween или ее аналоги вроде iTween. Там очень много полезных штук, в том числе и плавное изменение параметров. Например так:
var time = 2.0f;
var alphaVal = 0.0f;
LeanTween.alpha(gameObject, alphaVal, time);
По мне так такие вещи лучше делать через стандартный аниматор. К нему пишите небольшой контроллер, который обновляет параметры по команде с кнопки и запускается анимация. Вот пример видео на английском как делать.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости