void AddCircleCollider2Ds(Transform parent) { // find all valid colliders, add them to projection var colliders = FindObjectsOfType <CircleCollider2D>(); var filtered = colliders.Where(co => IsValidCollider(co)).ToList(); foreach (var collider in filtered) { // note: creating a primitive is necessary in order for it to bake properly var go = GameObject.CreatePrimitive(PrimitiveType.Cylinder); go.isStatic = true; go.transform.parent = parent; // position via offset and transformpoint var localPos = new Vector3(collider.offset.x, collider.offset.y, 0); var worldPos = collider.transform.TransformPoint(localPos); // position in 3D with Y aligned so feet are at y=0 go.transform.position = new Vector3(worldPos.x, NavMesh2D.ProjectedObjectY, worldPos.y); // scale depending on scale * collider size (circle=radius/box=size/...) go.transform.localScale = NavMeshUtils2D.ScaleFromCircleCollider2D(collider); // rotation go.transform.rotation = Quaternion.Euler(NavMeshUtils2D.RotationTo3D(collider.transform.eulerAngles)); MakeUnwalkable(go); } }