gpt4 book ai didi

swift - RealityKit - 动画模型实体的不透明度?

转载 作者:行者123 更新时间:2023-12-03 19:19:03 24 4
gpt4 key购买 nike

通过在 model 上设置 Material 的颜色ModelEntity 的属性,我可以改变对象的不透明度/alpha。但是你如何制作这个动画呢?我的目标是为具有完全不透明度的对象设置动画,然后让它们淡化到设定的不透明度,例如 50%。

SCNAction.fadeOpacitySCNNodeSceneKit ,这特别容易。

let fade = SCNAction.fadeOpacity(by: 0.5, duration: 0.5)
node.runAction(fade)

Entity符合 HasTransform ,但这只会让您对比例、位置和方向进行动画处理。与 Material 的动画无关,例如淡入或淡出。如果您为隐藏或显示动画创建行为,则效果在 RealityComposer 中,但似乎没有类似于 HasTransform 的内容。提供动画不透明度的功能。

我一直在文档中寻找一些东西,我的下一个想法本质上是创建一个自定义动画来替换这种行为,但它似乎应该可用,而我只是没有找到它。

最佳答案

I tested it using different techniques and came to the sad conclusion: you can't animate a material's opacity in RealityKit framework because RealityKit materials don't support animation at runtime (for now I hope). Let's wait for RealityKit's major update.



这是您可以用于测试的代码

( arView.alpha 属性正常工作):
import UIKit
import RealityKit

class ViewController: UIViewController {

@IBOutlet var arView: ARView!

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

arView.alpha = 1.0
opacityAnimation()
}

func opacityAnimation() {

UIView.animate(withDuration: 5.0,
animations: {

self.arView.alpha = 0.0
})
}
}

并使用此代码片段以确保动画无法正常工作

(没有动画过程,只是赋值):
import UIKit
import RealityKit

class ViewController: UIViewController {

@IBOutlet var arView: ARView!
let tetheringAnchor = AnchorEntity(world: [0,0,0])
var material = SimpleMaterial()
let mesh: MeshResource = .generateSphere(radius: 0.5)
var sphereComponent: ModelComponent? = nil

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

material.metallic = .float(1.0)
material.roughness = .float(0.0)
material.baseColor = .color(.red)

sphereComponent = ModelComponent(mesh: mesh,
materials: [material])

tetheringAnchor.components.set(sphereComponent!)
arView.scene.anchors.append(tetheringAnchor)

opacityAnimation()
}

func opacityAnimation() {

UIView.animate(withDuration: 5.0,
animations: {

self.material.metallic = .float(1.0)
self.material.roughness = .float(0.0)
self.material.baseColor = .color(.green)

self.sphereComponent = ModelComponent(mesh: self.mesh,
materials: [self.material])

self.tetheringAnchor.components.set(self.sphereComponent!)
self.arView.scene.anchors.append(self.tetheringAnchor)
})
}
}

关于swift - RealityKit - 动画模型实体的不透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com