In the spirit of collaboration and knowledge sharing, I've decided to open source a selection of helper functions that I've developed during my journey of creating the first visionOS experience using RealityKit.
yourEntity?.visualizeBones()
-
visualizeBones(size: Float = 0.5)- Visualizes the bones of a model entity by creating a debug entity with a cone mesh representing each bone.
-
createEntityBox(_ color: UIColor, size: Float) -> Entity- Creates a box-shaped entity with the specified color and size.
-
update(shaderGraphMaterial oldMaterial: ShaderGraphMaterial, _ handler: (inout ShaderGraphMaterial) throws -> Void) rethrows- Updates the shader graph material of the entity by applying the changes defined in the handler closure.
-
replaceAndStoreOldMaterials(material: Material, copyPBRInputs: Bool = false)- Replaces the current materials of the entity with a new material and optionally copies the inputs from the physically based rendering (PBR) materials.
-
restoreOriginalMaterials()- Restores the original materials of the entity that were saved before replacement.
-
saveMaterialParam(paramName: String)- Saves the parameter value of the shader graph material with the given name.
-
getMaterialParam(paramName: String) -> MaterialParameters.Value?- Retrieves the value of the material parameter with the given name.
-
setMaterialParamWeight(paramName: String, value: Float)- Sets the weight of the material parameter with the given name, multiplying it by the saved value if it exists.
-
setMaterialParam(paramName: String, value: MaterialParameters.Value)- Sets the value of the material parameter with the given name.
-
playAllAnimations(shouldLoop: Bool = false)- Plays all available animations for the entity, with an option to loop them indefinitely.
-
distance(from other: Entity) -> Float- Calculates the distance between the entity and another entity.
-
distance(from point: SIMD3<Float>) -> Float- Calculates the distance between the entity and a point in 3D space.
-
isDistanceWithinThreshold(from other: Entity, max: Float) -> Bool- Checks if the distance between the entity and another entity is within a specified threshold.
-
isDistanceWithinThreshold(from point: SIMD3<Float>, max: Float) -> Bool- Checks if the distance between the entity and a point in 3D space is within a specified threshold.
-
findParentWithName(_ findName: String) -> Entity?- Searches for a parent entity with the specified name.
-
findParentWithAnyComponents(withComponents componentClasses: [Component.Type]) -> Entity?- Searches for a parent entity that has any of the specified components.
-
findParentWithComponent<T: Component>(withComponent componentClass: T.Type) -> Entity?- Searches for a parent entity that has the specified component type.
-
findFirstComponent<T: Component>(withComponent componentClass: T.Type) -> T?- Searches for the first component of the specified type in the entity hierarchy.
-
hasComponentInHierarchy<T: Component>(withComponent componentClass: T.Type) -> Bool- Checks if any entity in the hierarchy has the specified component type.
-
forEachDescendant<T: Component>(withComponent componentClass: T.Type, _ closure: (Entity, T) -> Void)- Iterates over all descendants with the specified component type and performs the given closure.
-
forEach<T: Component>(withComponent componentClass: T.Type, _ closure: (Entity, T) -> Void)- Iterates over the entity and its children with the specified component type and performs the given closure.
-
removeComponentFromHierarchy(componentType: Component.Type)- Removes the specified component type from the entity and its descendants.
-
fixObjectPivot() -> Entity?- Fixes the pivot of the entity by creating a new entity at the visual center and re-parenting the original entity to it.
-
generateCollisionsForEnabledOnly()- Generates collision shapes for the entity and its children if they are enabled.
-
generatePreciseCollisionsForEachEnabled<T: Component>(withComponent componentClass: T.Type) async- Asynchronously generates precise collision shapes for each enabled entity with the specified component type.
-
generatePreciseCollisionShapes() async- Asynchronously generates precise collision shapes for the entity if it is enabled.
-
stopEmittingParticleEmitters()- Stops all particle emitters from emitting particles in the entity hierarchy.
-
removeAllParticleEmitters()- Removes all particle emitter components from the entity hierarchy.
-
playAllParticles()- Starts emitting particles for all particle emitters in the entity hierarchy.
-
addMeshOutline(outlineMaterial: RealityKit.Material, offset: Float)- Adds an outline to the mesh of the entity using the specified material and offset.
-
makeMeshResourcesUnique()- Makes the mesh resources of the entity unique to avoid sharing them with other entities.
-
addDoubleSide()- Adds double-sided rendering to the entity's mesh.
-
addDoubleSide(otherSideMaterial: RealityKit.Material, ignoreComponentTypes: [Component.Type]?)- Adds double-sided rendering to the entity's mesh with the specified material for the other side, ignoring entities with specified component types.