Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RealityKit – Set text programmatically of an Entity of Reality Composer

In my iOS app I want to introduce a part of AR using the new Reality Composer.

In my project I load a scene with this code:

let arView = ARView.init(frame: frame)

// Configure the AR session for horizontal plane tracking.

let arConfiguration = ARWorldTrackingConfiguration()
arConfiguration.planeDetection = .horizontal
arView.session.run(arConfiguration)
arView.session.delegate = self

self.view.addSubview(arView)

Experience.loadSceneAsync{ [weak self] scene, error in

print("Error \(String(describing: error))")

guard let scene = scene else { return }

arView.scene.addAnchor(scene)

// THIS IS THE entity that i want to edit programmatically
scene.Label

The "scene.label" is a text object in my scene and I want to set text programmatically.

How can I do that? It's possible?

Thanks in advance

like image 297
BlackRock Avatar asked Jun 18 '19 10:06

BlackRock


People also ask

How do I create a .reality File?

To create a Reality file, choose File > Export > Export Project in the Reality Composer menu, and provide a name for the file. You use the Reality file that gets stored to disk just like you would use a usdz file, as described in Previewing a Model with AR Quick Look.

What is RealityKit?

The RealityKit framework was built from the ground up specifically for augmented reality with photo-realistic rendering, camera effects, animations, physics, and more.

What is Reality Composer used for?

Reality Composer is a tool that lets anyone quickly prototype and build AR scenes ready to integrate into apps or experience with AR Quick Look. Walk through the powerful and intuitive capabilities of Reality Composer and discover hundreds of ready-to-use virtual objects in its built-in AR library.


1 Answers

In RealityKit framework, use the following type method for generating 3D text:

static func generateText(_ string: String, 
                   extrusionDepth: Float, 
                             font: MeshResource.Font, 
                   containerFrame: CGRect, 
                        alignment: CTTextAlignment, 
                    lineBreakMode: CTLineBreakMode) -> MeshResource

Let's see how a real code looks like:

let textAnchor = try! SomeText.loadTextScene()

let textEntity: Entity = textAnchor.vacation!.children[0].children[0]

var textModelComponent = (textEntity.components[ModelComponent])!

textModelComponent.mesh = .generateText("Hello, World!",
                         extrusionDepth: 0.01,
                                   font: .systemFont(ofSize: 0.25),
                         containerFrame: CGRect.zero,
                              alignment: .center,
                          lineBreakMode: .byCharWrapping)

textAnchor.vacation!.children[0].children[0].components.set(textModelComponent)
arView.scene.anchors.append(textAnchor)
like image 113
Andy Jazz Avatar answered Sep 18 '22 03:09

Andy Jazz