Destination never reports occupied
Check Is Trigger, the Rigidbody/Collider collision rules, and whether the collider belongs to the assigned object or one of its children.
Components
Complete after configured objects occupy their matching PlacementTrigger destinations.
ObjectPlacementObjective completes when every configured movable object occupies its corresponding destination trigger. Each PlacementTarget pairs an exact GameObject—or a fallback exact name—with a destination GameObject. At Start, the component finds an available PlacementTrigger on each destination or adds one and configures it.
Use it for sockets, puzzle pieces, tools on stations, or physical props placed in marked areas. Do not use it when “placed” depends on rotation tolerance, inventory state, snapping rules, or a vendor-specific grab state that cannot be represented by trigger occupancy; signal a custom Objective from that authoritative system instead.
| Field | Purpose | Requirement |
|---|---|---|
| Movable Object | Exact accepted root; child colliders also match | Preferred over name matching |
| Movable Object Name | Fallback exact collider name | Used only when no object reference is assigned |
| Destination | GameObject that owns the trigger collider/helper | Must exist; collider should have Is Trigger enabled |
| Placement Trigger | Runtime helper reference | Assigned automatically and hidden from normal authoring |
| On All Objects Placed | Feedback immediately before completion request | Invoked once when all occupancy flags are true |
Each frame, a nonempty target list is considered complete only when every target has a configured trigger and every trigger reports IsTriggered. The component invokes On All Objects Placed once, then requests completion if Objective ID is non-empty. If the Chapter rejects that request, the feedback flag remains set; correct linking before play rather than relying on a second feedback invocation.
ResetObjective() clears the base completion flag, the one-shot feedback flag, and every configured trigger's occupancy state. It does not move objects back to their starting transforms. Add project-owned reset or respawn work to the Chapter start edge when the puzzle must be replayable.
Check Is Trigger, the Rigidbody/Collider collision rules, and whether the collider belongs to the assigned object or one of its children.
The component searches for a trigger with no owner or the same owner. Use separate destination helpers when each socket must accept a different target.
The fallback compares the collider GameObject name exactly. Prefer the object reference, especially for instantiated clones.
Enable managed external behavior on the PlacementTrigger and call SetTriggered from the authoritative integration.