• Как отслеживать состояние компонента через систему событий в Unity?

    K0TlK
    @K0TlK
    Буллю людей.
    соответственно, нет точного понимания, когда именно произойдет изменение свойства Interactable

    Это твоя проблема. Изменять внутреннее состояние объекта напрямую извне нельзя. Делай обертку, которая будет вызывать ивент, когда канвасгруп становится интеракивным/не интерактивным.

    Напишу тот же пример, что и на SO тебе написал.
    public class SomeCanvas : MonoBehaviour
    {
        public event Action<bool> ActiveStateChanged;
            
        [SerializeField] private CanvasGroup _canvasGroup;
    
        public void Activate()
        {
            SetActiveState(true);
        }
    
        public void Deactivate()
        {
            SetActiveState(false);
        }
    
        private void SetActiveState(bool state)
        {
            if (_canvasGroup.interactable == state) return;
            
            _canvasGroup.interactable = state;
            ActiveStateChanged?.Invoke(state);
        }
    }
    
    public class NotSomeCanvas : MonoBehaviour
    {
        [SerializeField] private SomeCanvas _someCanvas;
    
        private void OnEnable()
        {
            _someCanvas.ActiveStateChanged += LogActiveState;
        }
    
        private void OnDisable()
        {
            _someCanvas.ActiveStateChanged -= LogActiveState;
        }
    
        private void LogActiveState(bool state)
        {
            print($"Current state - {state}");
        }
    }


    SomeCanvas - обертка, через него делаешь интерактивным/не интерактивным свой канвасгруп, он вызывает ивент, на ивент подписываешь нужные методы. Можешь разделить на 2 ивента Activated/Deactivated чтобы не делать проверки на false или true, как тебе удобно
    Ответ написан
    Комментировать