正如@AndyFedo 所说,目前没有办法为Entity
.
即使SimpleMaterial
在运行时更改 a 当前也会导致闪烁。
话虽如此,我能够为 a 的 Alpha 设置动画SimpleMaterials Color
,但是根据测试,它绝不是最佳的或推荐的。
但以防万一您想尝试进一步尝试此途径,请参阅附加示例,该示例假定您只有一个SimpleMaterial
:
class CustomBox: Entity, HasModel, HasAnchoring {
var timer: Timer?
var baseColour: UIColor!
//MARK:- Initialization
/// Initializes The Box With The Desired Colour
/// - Parameter color: UIColor
required init(color: UIColor) {
self.baseColour = color
super.init()
self.components[ModelComponent] = ModelComponent(mesh: .generateBox(size: [0.2, 0.2, 0.2]),
materials: [SimpleMaterial (color: baseColour, isMetallic: false)]
)
}
required init() { super.init() }
//MARK:- Example Fading
/// Fades The Colour Of The Entities Current Material
func fadeOut() {
var alpha: CGFloat = 1.0
timer = Timer.scheduledTimer(withTimeInterval: 0.05, repeats: true) { timer in
if alpha == 0 {
timer.invalidate()
return
}
var material = SimpleMaterial()
alpha -= 0.01
material.baseColor = MaterialColorParameter.color(self.baseColour.withAlphaComponent(alpha))
material.metallic = .float(Float(alpha))
material.roughness = .float(Float(alpha))
DispatchQueue.main.async {
self.model?.materials = [material]
}
}
}
}
因此,只是为了测试,您可以创建然后调用函数,如下所示:
let box = CustomBox(color: .green)
box.position = [0,0,-0.5]
arView.scene.anchors.append(box)
box.fadeOut()
另外我会礼貌地问,这个答案不会被否决,因为我只是在重复以下事实:(a)任何当前的内置方法都不可能,并且(b)它可以部分实现,尽管非常范围有限(因此目前;以一种人们认为适合生产的方式)。