[Swift] 60 visionOSアプリ製作 その8 ModelEntityのカラー変更 RealityKit

[Mac M2 Pro 12CPU, Ventura 13.6, visionOS 1.0 (21N5300a), Xcode 15.1 beta 3]

usdzファイルを読み込んだModelEntityは後からコードでカラー変更できるようです。あくまでアプリ上で一時的に変わるだけで、元モデルの色は変わりません。

マテリアルのインデックス番号を指定して、3Dモデルの各面や面取り領域のカラーを変えることも可能でしょう。

Reality Composer Proの機能をコード化しているといったところでしょうか。

var body: some View {
    ZStack {
        RealityView { content in
            if let entity = try? await ModelEntity(named: "hexa") {
                // エンティティのモデルを取得
                if var modelComponent = entity.model {
                    for i in 0..<modelComponent.materials.count {
                        if var material = modelComponent.materials[i] as? PhysicallyBasedMaterial {
                            // 全てのマテリアルをグリーンにする
                            material.baseColor = PhysicallyBasedMaterial.BaseColor(tint: .green)
                            // マテリアルを更新
                            modelComponent.materials[i] = material
                        }
                    }
                    // エンティティのモデルコンポーネントを更新
                    entity.model = modelComponent
                }

[Swift] 59 visionOSアプリ製作 その7 スライダー、SwiftData、Componentの連携

[Mac M2 Pro 12CPU, Ventura 13.6, visionOS 1.0 (21N5300a), Xcode 15.1 beta 3]

スライダーで3Dモデルの回転速度を変えられるようにしました。

スライダーを動かして止めると同時に変数、SwiftData、Componentの値を更新する仕組みの構築に苦労しました。

回転速度を設定しても他の画面に遷移して設定画面に戻るとスライダーが初期値になっている(回転速度自体はそのまま)、スライダーが初期値から動かない(動かしても離すと戻る)など様々なトラブルに見舞われ、結局丸一日掛かってしまいました。