RealityKit Basics: Create Shapes
Creating primitive shapes in code.
Overview
In RealityKit, we have two simple ways to create primitive shapes.
- Directly in code
- In Reality Composer Pro
Oddly, there these two have a different selection of shapes. For example, in code we can generate planes, but in Reality Composer Pro we can’t.
Here are a few example of creating shapes in code. We place these in a volume.

Example Code
struct Example038: View {
var body: some View {
RealityView { content, attachments in
// Create an empty entity we can use to group our shapes
let group = Entity()
content.add(group)
// We can move this group down in the volume and scale it to 50%.
group.position = [0, -0.25, 0]
group.scale = [0.5, 0.5, 0.5]
// Create shapes
// ModelEntity is a convenient way to create an entity with a model, shapes, and material.
let sphere = ModelEntity(
mesh: .generateSphere(radius: 0.1),
materials: [SimpleMaterial(color: .stepRed, isMetallic: false)])
// Set the position of the sphere relative to the group
sphere.setPosition([-0.5, 0, 0], relativeTo: group)
// Add the sphere as a child to the group
group.addChild(sphere)
let box = ModelEntity(
mesh: .generateBox(size: 0.2),
materials: [SimpleMaterial(color: .stepGreen, isMetallic: false)])
box.setPosition([0, -0.1, 0], relativeTo: group)
group.addChild(box)
let cylinder = ModelEntity(
mesh: .generateCylinder(height: 0.2, radius: 0.1),
materials: [SimpleMaterial(color: .stepBlue, isMetallic: false)])
cylinder.setPosition([0.5, 0, 0], relativeTo: group)
group.addChild(cylinder)
let cone = ModelEntity(
mesh: .generateCone(height: 0.2, radius: 0.075),
materials: [SimpleMaterial(color: .stepBlue, isMetallic: false)])
cone.setPosition([0.4, 0.5, 0], relativeTo: group)
group.addChild(cone)
let plane = ModelEntity(
mesh: .generatePlane(width: 0.2, height: 0.2),
materials: [SimpleMaterial(color: .stepGreen, isMetallic: false)])
plane.setPosition([-0.4, 0.5, 0], relativeTo: group)
group.addChild(plane)
} update: { content, attachments in
// More on update later
} attachments: {
// More on attachments later
Attachment(id: "AttachmentContent") {
Text("")
}
}
}
}Support our work so we can continue to bring you new examples and articles.

Follow Step Into Vision