Создаешь скрипт AlphaChanger.cs, в нем такой код
private SpriteRenderer spriteRenderer; //Кэшируем компонент
[SerializeField] private float speed = 1; //Скорость фейдинга
private void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer>();
}
public void Show()
{
StartCoroutine(SetVisibility(1));
}
public void Hide()
{
StartCoroutine(SetVisibility(0));
}
private IEnumerator SetVisibility(float finish)
{
var color = spriteRenderer.color;
while (true)
{
color.a = Mathf.MoveTowards(color.a, finish, speed * Time.deltaTime);
spriteRenderer.color = color;
if (color.a == finish) break;
yield return null;
}
}
Вешаешь этот скрипт на все спрайты, которые будут фейдится. Если нужно вызвать его у детей gameobjecta, заводишь еще один скрипт AlphaChangerManager, в нем пишешь такие функции.
private AlphaChanger[] alphaChangers; //Кэшируем компоненты детей
private void Awake()
{
alphaChangers = GetComponentsInChildren<AlphaChanger>();
}
public void ShowAll()
{
alphaChangers.ForEach(a => a.Show());
}
public void HideAll()
{
alphaChangers.ForEach(a => a.Hide());
}
Преимущество в том, что можно вызвать как и отдельный фейд у любого спрайта, так и все сразу, через общий скрипт