У меня возникла такая проблема в коде: анимация сворачивания и раскрытия дочерних кнопок проигрывается, но они должны сдвигать не дочерние кнопки, которые находятся в ScrollView. Есть ли способы это исправить?
Внешний вид структуры
Сам код:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using DG.Tweening;
public class TreeButton : MonoBehaviour, IPointerClickHandler
{
[Header("UI")]
[SerializeField] private RectTransform buttonChild;
[Header("Anim")]
[SerializeField] private float duration = 0.25f;
private bool isOpen = true;
private void Start()
{
isOpen = true;
buttonChild.gameObject.SetActive(true);
}
// обработка кликов мыши
public void OnPointerClick(PointerEventData eventData)
{
// ТОЛЬКО ПРАВАЯ КНОПКА
if (eventData.button == PointerEventData.InputButton.Right)
{
Toggle();
}
}
public void Toggle()
{
if (isOpen)
Close();
else
Open();
isOpen = !isOpen;
}
private void Open()
{
buttonChild.gameObject.SetActive(true);
buttonChild.localScale = new Vector3(1, 0, 1);
buttonChild
.DOScaleY(1f, duration)
.SetEase(Ease.OutCubic)
.OnUpdate(UpdateLayout)
.OnComplete(UpdateLayout);
}
private void Close()
{
buttonChild
.DOScaleY(0f, duration)
.SetEase(Ease.InCubic)
.OnUpdate(UpdateLayout)
.OnComplete(() =>
{
buttonChild.gameObject.SetActive(false);
UpdateLayout();
});
}
private void UpdateLayout()
{
LayoutRebuilder.ForceRebuildLayoutImmediate(
(RectTransform)transform.parent
);
}
}