Как говорит @AndyFedo, в настоящее время нет способа анимировать непрозрачность и альфа для Entity
.
Даже изменение SimpleMaterial
во время выполнения в настоящее время приводит к мерцанию.
Сказав это, я смог оживить альфу 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()
Также я бы вежливо попросил, чтобы за этот ответ не проголосовали, поскольку я просто повторяю тот факт, что (а) это невозможно при использовании каких-либо текущих встроенных методов, и (б) что его можно частично достичь, хотя в очень ограниченной степени (и, следовательно, в настоящее время; таким образом, который будет казаться пригодным для производства).