我需要建议。我正在使用 RealityKit 来显示栅栏模型。我的模型有多个网格,不应立即显示。例如填充围栏。有不同的选择,我的模型中都有:
我想每次都展示一个。我怎样才能做到这一点?我无法在运行时编辑网格,可以吗?我正在考虑更改每个网格的材质,但是当我尝试使用 SimpleMaterial 设置清晰的颜色时,它显示黑色的网格,当我尝试 OcclusionMateril 时,我得到了这个结果:
我如何尝试使用 SimpleMaterial 隐藏材质的示例:
var material = SimpleMaterial()
material.baseColor = MaterialColorParameter.color(UIColor.clear)
material.tintColor = .clear
clonedEntity.model?.materials[index] = material
或者使用遮挡材质(在上面应用程序的屏幕截图中):
let occlusion = OcclusionMaterial()
clonedEntity.model?.materials[index] = occlusion
是否有可能以某种方式隐藏 3D 模型的某些部分?或者我是否必须有多个模型,例如当我想更改填充时,我必须更改整个模型?或者我应该以某种方式从多个模型合成一个对象(例如填充和栅栏的其余部分)?感谢您的任何建议。
最稳健的方法是创建一个组件 USDZ 模型(包含单独的部分),然后使用.isEnabled
RealityKit 2.0 中的实例属性可转动任何部件On
or Off
.
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let shelf = try! ModelEntity.load(named: "Shelf")
var counter: Int = 0
override func touchesBegan(_ touches: Set<UITouch>,
with event: UIEvent?) {
self.counter += 1
let metal = shelf.children[0].children[0].children[0]
.children[0].children[0].children[0] as! ModelEntity
let wood = shelf.children[0].children[0].children[0]
.children[0].children[0].children[1] as! ModelEntity
if counter % 3 == 1 {
metal.isEnabled = false
wood.isEnabled = true
} else if counter % 3 == 2 {
metal.isEnabled = true
wood.isEnabled = false
} else if counter % 3 == 0 {
metal.isEnabled = true
wood.isEnabled = true
}
}
override func viewDidLoad() {
super.viewDidLoad()
let anchor = AnchorEntity()
anchor.addChild(shelf)
arView.scene.anchors.append(anchor)
}
}
如果您不喜欢使用.children[i]
链式,看这个答案,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)