What is UCX_ collision and how do I set it up in an asset pack?
UCX_ is the naming convention that tells an engine importer "this child mesh is a convex collision hull, not renderable geometry". Name a convex hull UCX_MyMesh, parent it under MyMesh, export both in one FBX, and Unreal turns it into collision on import — Unity does the same with a small importer script.
UCX_ is a prefix on an object name. That is the whole mechanism, and its simplicity is the point: it lets a mesh file carry collision information without the format needing a concept of collision at all.
You model a simplified convex hull around your prop, name it UCX_<ExactMeshName>, put it in the same FBX as the render mesh, and the importer recognises the prefix, strips the object out of the renderable geometry and registers it as a collision primitive.
The rules that actually matter
The convention is unforgiving about names, and almost every “why did my collision not import” is one of these:
- The suffix must match the render mesh exactly.
SM_Office60_DesktakesUCX_SM_Office60_Desk. NotUCX_Desk, notUCX_SM_Office60_Desk_Collision. - Multiple hulls get a numeric suffix.
UCX_SM_Office60_Desk_01,_02, and so on. This is how you collide a shape that is not convex — a desk with a knee hole is three boxes, not one hull. - Each hull must genuinely be convex. If it is not, the physics engine will either silently take its convex hull anyway or reject it. A “concave” hull that looks right in your DCC is the second most common failure.
- It must be a child of the render mesh, and both must be in the same file.
- Transforms applied, same as the render mesh. A hull with a leftover scale collides at the wrong size.
Why convex hulls rather than a mesh collider
Because concave mesh collision is expensive and, for anything that moves, usually not available at all. Convex-convex intersection is a solved, fast problem; concave collision requires decomposing the mesh or falling back to a static-only triangle mesh. For props — which get pushed, dropped, carried and stacked — convex hulls are the only sane default.
The practical rule: use the fewest hulls that preserve the shapes a player will bump into. A bookcase is one box. A desk is three (two pedestals and the top). A chair with legs is a box for the seat, a box for the back, and either four thin boxes or one big box under the seat depending on whether anything ever needs to roll under it. Nobody has ever complained that a chair’s legs were collided as a single block; plenty of people have complained about a 4,000-triangle mesh collider on a chair.
Unity, specifically
Unreal reads UCX_ natively. Unity does not, out of the box — it will import the hull as a visible child mesh, which is why an asset pack that ships UCX_ and nothing else looks broken in Unity: you get a grey box floating inside your desk.
The fix is a small editor script that runs on import: find children whose name starts with UCX_, strip the MeshRenderer, add a MeshCollider with convex = true, and leave the MeshFilter for the collider to read. Our pack ships that importer, and it also builds a prefab per asset while it is there, so a buyer drops the folder in and gets usable prefabs rather than a mesh list.
If a pack advertises UCX_ collision for Unity and does not include the importer, ask what happens on import. The answer is “grey boxes”.
Checking it worked
- In Unreal, open the static mesh and toggle Collision → Simple Collision. You should see your hulls and the triangle count for simple collision should be small.
- In Unity, select the prefab and confirm each collider is a MeshCollider with Convex ticked, and that no
UCX_object still has a renderer on it. - Either engine: drop a physics sphere on the prop and watch where it stops. That is the only test that is not a proxy.
Updated 13 August 2026 · LeftPunch Studio
Related
We write these while building. The pack they come from — a 1960s office set of 110 props plus a 30-module architecture kit — is in production and every prop's audit verdict is published, including the ones that failed.
See the pack