Skip to main content

Game Event Node Behavior

While the graph shows connections, the Node Behavior Configuration Window controls the detailed execution logic of each individual node.

Access: Double-click any node in the flow graph to open the configuration window for node behavior.

Node Configuration Window


🎯 Window Overview​

The configuration window is divided into three main sections:

SectionPurposeApplies To
Node InformationView event details and typeAll nodes
Node ConditionVisual logic gate for execution controlAll nodes
Node ConfigurationTiming, priority, and data passing settingsAll nodes (type-specific)

πŸ“‹ Node Information​

Displays read-only details about the selected node.

Node Information Card

Event Name: The Game Event this node will raise.

Node Type: Trigger (parallel) or Chain (sequential).

Event GUID: Unique identifier for internal tracking.

Use Case: Verify you're editing the correct node before making changes.


🧩 Node Condition (Flow Gate)​

Each node has its own visual condition tree that controls whether it executes.

Node Condition Tree

How It Works​

If condition evaluates to FALSE:

  • Node does not fire
  • Flow stops down this branch
  • Connected child nodes are skipped

If condition evaluates to TRUE:

  • Node fires normally
  • Flow continues to children

Condition Context​

You have access to:

Event Argument (Arg): Data from the incoming event

Example: Arg.amount > 50

Sender (Sender): Source object (for sender events)

Example: Sender.tag == "Enemy"

Scene Objects: Any GameObject/Component in the scene

Example: Player.Health < 20

Visual Builder​

The condition system uses the same Visual Condition Tree as Event Behaviors.

Full Documentation: See Visual Condition Tree for complete guide on:

  • Building logic gates (AND/OR groups)
  • Source types (Event Argument, Scene Type, Random, Constant)
  • Comparison operators
  • Type validation
  • Best practices
Reusable Logic

The visual condition system is identical across:

  • Event Behaviors (in Event Inspector)
  • Flow Nodes (this window)

Learn it once, use it everywhere!


Practical Example​

Scenario: Only play "Low Health Warning" when health is critical.

Condition Tree:

Result: Sound only plays when all three conditions pass.


βš™οΈ Node Configuration​

Settings that control timing, priority, and data flow.

General Settings (All Nodes)​

Node Config General

Start Delay

Unit: Seconds (float)

Effect: Node waits this duration before raising its event.

Use Cases:

  • Staggered explosions (0.2s apart)
  • Delayed reactions to events
  • Timed sequences

Example:

πŸ”˜ Raise: OnButtonPressed
β”‚
β”œβ”€β–Ί ⏱️ 0.5s ──┐
β”‚ β–Ό
β”‚ 🎡 PlayClickSound βœ… Executed
β”‚
β”œβ”€β–Ί ⏱️ 1.0s ────────┐
β”‚ β–Ό
β”‚ πŸ’¬ ShowConfirmation βœ… Executed
β”‚
└─► ⏱️ 2.0s ──────────────────┐
β–Ό
πŸšͺ CloseMenu βœ… Finalized

Visual Indicator: Badge shows ⏱️ 0.5s at bottom of node.

Pass Argument

Type: Boolean toggle

Effect: Controls whether event data flows to this node.


βœ… Checked (Pass Argument: ON)​

Node receives data from previous event (if types are compatible).

When to Use:

  • Forwarding damage info
  • Passing scores/values
  • Data pipelines

Example:

Connection Color: Depends on type compatibility (Green/Yellow/Orange).


❌ Unchecked (Pass Argument: OFF)​

Node fires as static call with default/null arguments.

When to Use:

  • Connecting incompatible types
  • Generic notifications (no data needed)
  • Forcing type-safe connections

Example:

πŸš€ Event: OnDamageReceived(DamageInfo)
β”‚ (Payload: { amount: 20.0, ... })
β”‚
πŸ›‘οΈ Filter: [ Pass Argument: OFF ]
β”‚ (Logic: Trigger Only / Data Dropped)
β”‚
└─► πŸ”Š Callback: PlayGenericSound()
β”‚
🎯 Result: Sound plays reliably without needing DamageInfo data.

Connection Color: Always 🟒 Green (forced safe).


Impact on Connections​

Pass Argument directly affects connection line colors:

PassSource TypeTarget TypeResult
OFFAnyAny🟒 Green (always safe)
ON<int><int>🟒 Green (perfect match)
ON<int><void>🟑 Yellow (data discarded)
ON<int><float>🟠 Orange (conversion)
ON<int><string>πŸ”΄ Red (blocked)

Recommendation: Use OFF when connecting incompatible types to avoid red connections.


Type-Specific Settings​

Configuration options change based on node type (Trigger vs Chain).

Trigger Node

Trigger Node (🟠 Orange)​

Execution: Parallel (fan-out) - fires and immediately continues.

Trigger Node Settings


Priority​

Type: Integer (default: 0)

Rule: Higher number = Earlier execution

Use Case: Control execution order when multiple Triggers connect to the same parent.


How Priority Works​

Scenario: Three Triggers connected to one Root node.

Execution Order: 10 β†’ 5 β†’ 0 (high to low)


Priority Values​

ValueMeaningUse Case
PositiveHigher priorityCritical actions (sound, input blocking)
0Default priorityNormal actions
NegativeLower priorityCleanup, logging, analytics

Example Use Cases:

  • +100: Block player input
  • +50: Play critical sound
  • 0: Standard VFX
  • -50: Log to analytics
  • -100: Cleanup temporary objects

Visual Indicator​

Badge shows ⬆️ +10 at bottom of node.

Chain Node

Chain Node (🟒 Green)​

Execution: Sequential (blocking) - fires and waits before continuing.

Chain Node Settings


Duration​

Type: Seconds (float)

Effect: Forces graph to pause at this node for specified time after event fires.

Use Case: Wait for animations, timed sequences, cooldowns.


Duration Examples​

Animation Wait:

πŸ–ΌοΈ T+0.0s | Initiation
βš”οΈ PlayAttackAnimation()
β”‚
┆ (Ξ” 1.5s Delay: Animation Duration)
β–Ό
πŸ–ΌοΈ T+1.5s | Execution
πŸ’₯ DealDamage()
β”‚
πŸ“Š Result: 1.5s total duration | βœ… Chain Completed

Timed Sequence:

πŸ–ΌοΈ T+0.0s | Activation
⚠️ ShowWarning()
β”‚
┆ (Ξ” 3.0s Display Duration)
β–Ό
πŸ–ΌοΈ T+3.0s | Cleanup
πŸ™ˆ HideWarning()
β”‚
πŸ“Š Lifecycle: 3.0s Active | βœ… Auto-Cleanup Completed

Visual Indicator: Badge shows ⏳ 3.0s at bottom of node.


Wait for Completion​

Type: Boolean toggle

Effect: Graph waits for async operations to finish before continuing.

Requirements: Event listener must return Task or IEnumerator.


Async Support​

Coroutines (IEnumerator):

public IEnumerator OnLoadLevel()
{
yield return SceneManager.LoadSceneAsync("Level2");
Debug.Log("Load complete");
}

Async/Await (Task):

public async Task OnDownloadData()
{
await DownloadFromServer();
Debug.Log("Download complete");
}

Flow Behavior:

Without "Wait for Completion", ShowSuccessMessage would fire immediately (before loading finishes).


Duration + Wait Combined​

Both settings work together:

Scenario A: Task < Duration (Minimum Floor)

Example: The cutscene finishes quickly (1.5s), but we want to maintain the 2.0s pacing.

πŸ–ΌοΈ T+0.0s | Initiation
🎬 PlayCutscene() βž” [Task Starts]
β”‚
β”œβ”€ ⏱️ 1.5s: [Task Completed Internally]
β”‚ ⏳ Status: Still Waiting (Safety Floor active)
β”‚
└─ 🏁 T+2.0s: Logic Continues
β”‚
πŸ“Š Result: Exact 2.0s duration (Pacing Maintained)

Scenario B: Task > Duration (Async Wait)

Example: The cutscene takes longer (5.0s) due to loading. The system waits for the task to finish.

πŸ–ΌοΈ T+0.0s | Initiation
🎬 PlayCutscene() βž” [Task Starts]
β”‚
β”œβ”€ ⏱️ 2.0s: [Safety Floor Reached]
β”‚ ⏳ Status: Task still running... (Async Wait active)
β”‚
└─ 🏁 T+5.0s: [Task Finally Completed] βž” Logic Continues
β”‚
πŸ“Š Result: 5.0s duration (Full Completion Guaranteed)

Visual Indicators:

  • ⏳ 2.0s (duration badge)
  • βš“ Wait (completion badge)

πŸ’‘ Configuration Examples​

Example 1: Delayed Trigger Sequence​

Goal: Play 3 sounds with staggered timing.


Example 2: Conditional Chain with Wait​

Goal: Load level only if player completed tutorial.

Flow:

  1. Level completes
  2. Check condition (passes if tutorial done)
  3. Start async load, wait for completion
  4. Show level start UI

πŸ”„ Quick Node Type Conversion​

Changed your mind about node type? No need to delete and recreate!

How To:

  1. Right-click the node in graph
  2. Select "Convert to Trigger" or "Convert to Chain"

What's Preserved:

  • βœ… Event assignment
  • βœ… Connections
  • βœ… Start Delay
  • βœ… Pass Argument
  • βœ… Conditions

What Changes:

  • Trigger β†’ Chain: Priority removed, Duration/Wait added
  • Chain β†’ Trigger: Duration/Wait removed, Priority added

❓ Troubleshooting​

Node Doesn't Fire​

Checklist:

  1. βœ… Is condition enabled and passing?
  2. βœ… Is parent node firing?
  3. βœ… Is connection intact?
  4. βœ… Is graph enabled in toolbar?

Debug: Add temporary condition-less node to test flow.


"Pass Argument" Grayed Out​

Cause: Event type is void (no arguments to pass).

Solution: This is expectedβ€”void events have no data to forward.


Duration Not Working​

Common Issues:

  • Node type is Trigger (duration only works on Chain nodes)
  • Duration set to 0
  • "Wait for Completion" blocking longer than duration

Solution: Verify node type and check both duration and wait settings.


Async Not Waiting​

Cause: "Wait for Completion" is unchecked.

Solution: Enable "Wait for Completion" toggle.

Requirement: Event listener must return Task or IEnumerator.


πŸ“– Next Steps​

Now that you can configure individual nodes, learn advanced patterns:

Advanced Logic Patterns

Build complex orchestrations with best practices

Visual Condition Tree

Master the condition builder (full reference)


Configuration Workflow

Best Practice: Configure nodes as you build, not after.

  1. Add node to graph
  2. Double-click to configure
  3. Set conditions first (prevents unwanted execution)
  4. Add timing settings
  5. Test in isolation before connecting
Auto-Save

Changes save automatically when you:

  • Close the window
  • Switch to another node
  • Click outside the window

No manual save button needed!