😸

VisionOS2.0でRealityViewのViewを常にカメラ側に向ける(BillBard)

2024/07/25に公開

VisionOS2.0からBillBoardComponentが追加されて便利!

生成したViewをカメラ側を見るようにしたい場合、カメラの位置等を取得しなければならないので面倒でしたが、VisionOS2.0からBillBoardComponentというものが追加されました。
このコンポーネントのおかげで、セットするだけでビルボードを実装できるようになりました。(下の画面の緑のView)

便利!

BillBoardComponentは、RealityKitFundationの中に追加されているので通常のWindowGroupのViewは利用できなさそうですが、RealityViewのAttachmentsで生成したViewには適用できます。
設定できるプロパティもいくつかあるので、ある程度カスタマイズできそうです。
https://developer.apple.com/documentation/realitykit/billboardcomponent?changes=_2

実際のコードだと下のような感じです。

var body: some View {
        RealityView { content, attachments in
            if let sceneAttachment = attachments.entity(for: "hoge") {
                sceneAttachment.position = SIMD3<Float>(0, 1, -0.5)
                sceneAttachment.transform.rotation = simd_quatf(angle: -0.5, axis: SIMD3<Float>(1, 0, 0))
                sceneAttachment.components.set(BillboardComponent())
                content.add(sceneAttachment)
            }
        }
        attachments: {
            Attachment(id: "hoge"){
                VStack {
                    Text("aaaaaaaaaaaaaaaaaaaaa")
                        .font(.system(size: 60))
                    Spacer()
                    Text("aaaaaaaaaaaaaaaaaaaaa")
                        .font(.system(size: 60))
                }
                .frame(width: 682,height: 682)
                .padding(.all, 24)
                .cornerRadius(40)
                .background(.green.opacity(0.2))
                .glassBackgroundEffect(in: .rect(cornerRadius: 25))
            }
        } 

大事な部分は、一行だけで下のコンポーネントをセットするだけです。

sceneAttachment.components.set(BillboardComponent())

おわりに

地味なところですが、ビルボードが公式でコンポーネントになっているのは便利ですね。
Appleが公開しているDioramaというサンプルに、ビルボードっぽい動きをしているものがあり、コードの中身を見てみたら、発見することができました。
もし、VisionOS2.0で開発していてビルボードが必要であれば利用してみたらどうでしょうか。

この他にも、追加されているけれど見つけれなていない新機能がいっぱいありそうで、今後の開発が楽しみです。

Discussion