RealityKit, изменение текстуры или материала путем изменения состояния или наблюдаемого объекта

Я пытаюсь изменить текстуру нажатием кнопки. Загрузка usdz (createData ()) или создание текста отлично работает, добавление материала и текстуры ...

Но при изменении состояния или связанного наблюдаемого объекта в моем ContentView текстура не обновляется ...

Может кто-нибудь подскажет, где и как обновить мою модель?

struct ContentView : View {
@ObservedObject var store = TextureStore()

func setMyCurrentTexture(textureName: String){
    store.myCurrentTexture = textureName
}

var body: some View {
    VStack {
        ARViewContainer(texture: $store.myCurrentTexture).edgesIgnoringSafeArea(.all)
        Spacer()
        HStack {
            Button(action: {
                self.setMyCurrentTexture(textureName: "one")
            }) {Text("Use texture one")}
            Spacer()
            Button(action: {self.setMyCurrentTexture(textureName: "two")
            }) {Text("Use texture two")}
        }
    }
}

}

struct ARViewContainer: UIViewRepresentable {
@Binding var texture: String

func makeUIView(context: Context) -> ARView {

    let arView = ARView(frame: .zero)
    let myurl  = URL(fileURLWithPath: "cube", relativeTo: FileManager.documentDirectoryURL).appendingPathExtension("usdz")
    let redbox = try? Entity.load(contentsOf: myurl)

    let textShape = MeshResource.generateText("nice text shape")
    var textMaterial = SimpleMaterial()

    do {
        try textMaterial.baseColor = .texture(.load(named: texture))
    } catch  {
        textMaterial.tintColor = UIColor(cgColor: #colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1))
    }

    let myText = ModelEntity(mesh: textShape, materials: [textMaterial])

    redbox?.scale = [0.3, 0.3, 0.3]
    myText.orientation = simd_quatf(angle: 3*Float.pi/2, axis: [1, 0, 0])
    myText.scale = [0.1, 0.1, 0.1]


    //         Creating parent ModelEntity
    let parentEntity = ModelEntity()
    parentEntity.addChild(redbox!)
    parentEntity.addChild(myText)

    let entityBounds = redbox!.visualBounds(relativeTo: parentEntity)
    parentEntity.collision = CollisionComponent(shapes: [ShapeResource.generateBox(size: entityBounds.extents).offsetBy(translation: entityBounds.center)])

    let anchor = AnchorEntity(plane: .any , classification: .any )
    anchor.addChild(parentEntity)

    arView.scene.anchors.append(anchor)
    arView.installGestures(.all, for: parentEntity)

    return arView

}

func updateUIView(_ uiView: ARView, context: Context) {
    // I COULD PRINT INTO CONSOLE, THAT texture IS CHANGING

    var material = SimpleMaterial()
    do {
        try material.baseColor = .texture(.load(named: texture))
    } catch  {
        material.tintColor = UIColor(cgColor: #colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1))
    }

    // BUT HOW TO ATTACH TO MY CUBE OR TO MY TEXT
    // I CAN TRIGGER THE VISIBILITY TOUGH WITH isEnabled

}

}


person MobJS    schedule 07.05.2020    source источник
comment
myCurrentTexture объявлен как @Published? Вы отлаживали, если попадали в updateUIView после нажатия кнопки?   -  person Asperi    schedule 07.05.2020
comment
Привет, MobJS, добро пожаловать в Stackoverflow. прочтите и примите во внимание этот stackoverflow.com/help/how-to-ask. Всегда полезно скопировать сюда исполняемый код, который воспроизводит вашу ошибку. Почему? потому что мы (как люди, которые хотели бы вам помочь) можем доказать, что наши решения работают. иначе мы можем просто угадать ... и вы получите более быстрые ответы, если ваш код работоспособен.   -  person Chris    schedule 07.05.2020
comment
Привет, @Asperi, да, если я напечатаю строку, я смогу увидеть ее в консоли. что он меняется при нажатии на кнопку.   -  person MobJS    schedule 07.05.2020
comment
@Chris Извините, я пропустил добавление функции, я сделаю это, но в основном это загрузка только файла usdz   -  person MobJS    schedule 07.05.2020
comment
Если вы сказали, что попали в updateUIView, то это не проблема с состоянием / привязкой.   -  person Asperi    schedule 07.05.2020
comment
Просто из любопытства: кто-нибудь знает, возможно ли это вообще? Я имею в виду, может быть, я был наивен, думая, что могу изменить текстуру во время выполнения. Как я уже сказал, установка видимости на true или false работает как шарм. Если у кого-то есть пример или подсказка, если это вообще возможно, .., я был бы очень благодарен! Я обновлю приведенный выше код и удалю функцию createData () и предполагаю, что в активах проекта есть файл cube.usdz.   -  person MobJS    schedule 08.05.2020
comment
Наконец, мне удалось решить свою проблему с помощью [этого сообщения] (stackoverflow.com/questions/59796488/) После изменения материала мне пришлось добавить это справа дети вроде этого ... textAnchor.realityComp! .children [0] .children [0] .components.set (textModelComp)   -  person MobJS    schedule 11.05.2020