我刚刚完成了一个项目: Xcode: File > New > Project >。
我想把ship.scn的颜色改为黄色,但什么都没发生。如何更改ship.scn的颜色??
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.showsStatistics = true
let scene = SCNScene(named: "art.scnassets/ship.scn")!
// here, trying to change the color of the ship.scn
scene.rootNode.geometry?.materials.first?.diffuse.contents = UIColor.yellow
sceneView.scene = scene
}我尝试了断点和po命令来检查rootNode包含了什么。
(lldb) po scene.rootNode.childNodes
▿ 1 element
- 0 : <SCNNode: 0x1c01f8d00 'ship' | 1 child>
(lldb) po scene.rootNode.childNodes.first?.name
▿ Optional<String>
- some : "ship"
(lldb) po scene.rootNode.childNodes.first?.geometry
nil为什么几何学是零?我能看到彩色船。
发布于 2017-12-14 21:43:14
欢迎来到堆栈溢出!是斯威夫特101的时间了..。这一行包含可选链
scene.rootNode.geometry?.materials.first?.diffuse.contents = UIColor.yellow每当您看到涉及问号的一系列属性访问/方法调用时,结果是.有问题。在这种情况下,如果rootNode.geometry为零,则发生后没有调用。
那么,如何解决这个问题呢?通常,在运行时检查您的场景,以确保您认为您拥有的节点层次结构是您实际得到的。使用调试器或一些打印语句来找出rootNode实际包含的内容、其子节点是什么、这些节点包含了什么等等。或者查看Xcode场景编辑器中的资产,并交叉引用来确定按名字搜索的哪些节点。
在您使用的Xcode项目模板中,船几何不在场景的根节点上.在开始之前,有几个节点层次结构。一旦您找到了正确的节点,设置diffuse.contents的第一个材料将取代纹理地图与您的颜色。
https://stackoverflow.com/questions/47810365
复制相似问题