"My scaled-up tree's collider didn't scale"
- You scale a GameObject (
WorldScale = 4.5) so a ~1 m mesh becomes a tall tree / prop. - The visual is correct height.
- Players fall through the trunk, or climb "through" branches — collision stays near the base at the unscaled size.
- A "0.5 m" trunk capsule behaves like a ~6 cm noodle after a large WorldScale.
CapsuleCollider Radius / Start / End do NOT follow WorldScale. (BoxCollider does.)
ModelCollider's physics hull also does NOT follow WorldScale (same class of bug). A 1 m-normalized mesh on a GO scaled 4.5× renders 4.5 m tall but the per-poly collider stays ~1 m, buried in the base.
Option A — capsules on an unscaled sibling
Put capsules on an unscaled sibling GameObject with dimensions already in world units (inches). Keep the visual child scaled; keep the collider child at WorldScale = 1.
Option B — bake scale into the vmdl (preferred for ModelCollider)
Create a per-model wrapper that bakes height into import_scale, then load it at GO WorldScale = 1:
import_scale = 39.37 * desiredHeightMetersSame OBJ path, same both-names material remap rule. New vmdls need an editor kick to compile.
Then ModelCollider matches the visual 1:1.
Caveat for "normalized ~1 m" AI meshes
import_scale = 39.37 × N only delivers an exact N-metre model if the source mesh's native bounding box is exactly 1 m. AI-generated OBJs are "normalized ~1 m", not exactly 1 m — a flat bake can under/over-shoot.
Safer runtime scale (self-corrects to true native size):
float M = 39.37f;
go.WorldScale = desiredHeightMeters * M / model.Bounds.Size.z;If you use baked wrappers and a graceful Model.Load(...) == null / IsError fallback, watch for mid-session .vmdl_c compiles: a boot-audit footprint can flip with a clean git diff when a wrapper finishes compiling between boots. See ai-generated-models.
BoxCollider dimensions are transformed with the GameObject. Capsule endpoints/radius and ModelCollider hulls are authored in model/local physics space and are not uniformly multiplied by WorldScale in current engine behavior — so visual scale and collision scale diverge. Baking import_scale makes the compiled physics and render meshes the same size at unit scale, which is the only frame those collider types reliably share.