Development docs. This page describes the unreleased 6.3 build.
Not every placement needs a character. A level editor, a city builder's grid,
a room-stacking demo, or a sandbox with no inventory can place objects with
nothing bound to placer_root. In 6.3 that is a supported state, not a
misconfiguration: session.get_placer_root() returns null and placement
works.
The rule is simple: a placer is required exactly when an enabled rule says it
is. PlacementRule.requires_placer() returns false by default; rules that
read the acting node for range, inventory or spending answer true — for
example SpendMaterialsRuleById.
Ask the session, do not guess
var requirement:StringName = session.placer_requirement()
# "" -> this session places fine with no actor
# "spend_materials" -> that enabled rule cannot run without oneplacer_requirement() resolves through the same tiers the validator runs, so a
rule the profile ignores never demands a placer.
What each state does
| State | Behavior |
|---|---|
| No placer, no enabled rule needs one | commits normally; reports name no placer |
| No placer, an enabled rule needs one | the commit lane refuses with a typed reason and mutates nothing |
| Placer bound, rule needs it | the rule runs against that node |
The refusal is shared by the single-press and drag-release lanes so both describe the gap the same way:
No placer assigned and rule 'spend_materials' requires one. Assign the
positioner's placer_root or call PlacementSession.set_placer_root().Setup health
Editor setup health reports an unbound placer as optional, with the reason
that it is needed only when an enabled rule requires a player. PlacementOwner
warnings and a missing-placer runtime issue appear only when the configuration
actually demands an actor, so an actor-free scene does not start with a warning
it cannot act on.
Choosing
- No actor-dependent rules? Bind nothing. Delete the placer assignment and
the 6.2
PlacementOwnernode if you still have one. - Range, inventory or cost rules? Bind a placer, and expect a typed refusal rather than a silent placement whenever it is missing or freed.
Do not invent a dummy player node to satisfy the old requirement: nothing in 6.3 reads a placer that no enabled rule asked for.
Using this in a game?
Grid Placement v6.3.0 — full source, playable demos, commercial license
The guide above is the same setup the shipped demos use. Try the build in your browser before you buy it.