docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Interact with behavior graphs via C# scripts

    Communication between behavior graphs and C# scripts is key to creating complex and responsive games. While behavior graphs provide a visual method to design complex behaviors, C# scripts provide control and detailed logic implementation.

    You can use two techniques to integrate these two systems:

    • Direct binding to a BehaviorGraphAgent for instance-specific interactions
    • Event Channel assets for global event propagation

    These methods enable GameObjects to share information and react to changes in real time.

    Use C# binding to a particular instance of BehaviorGraphAgent

    You can bind directly to a BehaviorGraphAgent to subscribe to BlackboardVariable using the BehaviorGraphReference API.

    You can then subscribe to the BlackboardVariable.OnValueChanged event or in case of an Event Channel, subscribe to BlackboardVariable.Value.Event event.

    Example code

    [SerializeField] private BehaviorGraphAgent m_Agent;
    
    // Agent state has changed to [value] (where value is of type StateExample)
    private BlackboardVariable<StateEventChannel> m_stateEventChannelBBV;
    private BlackboardVariable<StateExample> m_stateBBV;
    
    private void OnEnable()
    {
        if (m_Agent.BlackboardReference.GetVariable("StateEventChannel", out m_stateEventChannelBBV))
            m_stateEventChannelBBV.Value.Event += OnStateEvent;
    
        if (m_Agent.BlackboardReference.GetVariable("StateToReact", out m_stateBBV))
            m_stateBBV.OnValueChanged += OnStateValueChanged;
    }
    
    private void OnDisable()
    {
        if (m_stateEventChannelBBV != null)
            m_stateEventChannelBBV.OnValueChanged -= OnStateChanged;
        if (m_stateBBV != null)
            m_stateBBV.OnValueChanged -= OnStateValueChanged;
    }
    
    private void Update()
    {
        // your custom logic
    
        // Send event to the event channel of the referenced agent.
        // Only this instance of agent will receive it (except if the BlackboardVariable is 'Shared').
        m_stateEventChannelBBV.Value.SendEventMessage(StateExample.Alert);
    }
    
    private void OnStateEvent(StateExample value)
    {
        // React to event
    }
    
    private void OnStateValueChanged()
    {
        // React to state change
    }
    

    C# binding using Event Channel asset

    Event Channel assets allow for global communication across multiple behavior graphs or between graphs and C# components. You can generate an instance of an Event Channel to send and receive messages. This method is ideal when you need consistent event handling across systems.

    Perform the following steps:

    1. Create the Event Channel.

      1. Open the Project window.
      2. Right-click and select Create > Behavior > Event Channel > [Channel Name].

      This creates an instance of that Event Channel that you can assign to the behavior graph and C# components.

    2. To assign the Event Channel, in the C# component, use the Event Channel API to listen or send a new message.

    Example code

    [SerializeField] private StateEventChannel m_EventChannel;
    
    private void OnEnable()
    {
        m_EventChannel.Event += OnStateEvent;
    }
    private void OnDisable()
    {
        m_EventChannel.Event -= OnStateEvent;
    }
    
    private void Update()
    {
        // your custom logic
    
        // Send event to the event channel instance.
        // All graphs and C# systems on that same event channel instance will receive it.
        m_EventChannel.SendEventMessage(StateExample.Alert);
    }
    
    private void OnStateEvent(StateExample value)
    {
        // React to event
    }
    

    Additional resources

    • Work with behavior graph assets
    • Create a behavior graph
    • Create and manage variables and Blackboards
    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)