Choose the Highest-Priority Need
Goal
Use priority or utility selection when branch order should be calculated from the current situation instead of fixed from left to right. Utility selection can also change the chosen branch while it runs.
Tree structure
Put one branch beneath Utility Selector for each need, such as Seek Safety, Eat, and Rest. Each branch supplies a comparable value through GetUtility().

How it runs
Utility Selector starts the available child with the highest GetUtility() value. Every tick it compares available children again and interrupts the current child if another wins. After a child fails, it recalculates utilities among the remaining children instead of consuming a fixed startup ordering.
Keep every score on a consistent scale. Display important values with watched fields or node text so runtime choices are explainable. Make interrupted tasks clean up their work in OnEnd, since a changed score can redirect execution before they finish.
Variations
Use Priority Selector when GetPriority() should establish a startup order that remains fixed during that traversal. Use a normal Selector when fixed horizontal order already communicates the decision clearly. If a changing condition must redirect a Running branch immediately, use Selector Evaluator for fixed priorities or a Selector with Conditional Aborts.
Tasks used in this tree
Utility Selector, Priority Selector, and project-specific utility tasks described in Parent Tasks.