首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用diffuse.contens和ARKit更改scn文件(资料/ SceneKit )的颜色

无法使用diffuse.contens和ARKit更改scn文件(资料/ SceneKit )的颜色
EN

Stack Overflow用户
提问于 2017-12-14 09:52:10
回答 1查看 1.7K关注 0票数 2

我刚刚完成了一个项目: Xcode: File > New > Project >。

我想把ship.scn的颜色改为黄色,但什么都没发生。如何更改ship.scn的颜色??

代码语言:javascript
复制
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包含了什么。

代码语言:javascript
复制
(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

为什么几何学是零?我能看到彩色船。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-14 21:43:14

欢迎来到堆栈溢出!是斯威夫特101的时间了..。这一行包含可选链

代码语言:javascript
复制
scene.rootNode.geometry?.materials.first?.diffuse.contents = UIColor.yellow

每当您看到涉及问号的一系列属性访问/方法调用时,结果是.有问题。在这种情况下,如果rootNode.geometry为零,则发生后没有调用。

那么,如何解决这个问题呢?通常,在运行时检查您的场景,以确保您认为您拥有的节点层次结构是您实际得到的。使用调试器或一些打印语句来找出rootNode实际包含的内容、其子节点是什么、这些节点包含了什么等等。或者查看Xcode场景编辑器中的资产,并交叉引用来确定按名字搜索的哪些节点。

在您使用的Xcode项目模板中,船几何不在场景的根节点上.在开始之前,有几个节点层次结构。一旦您找到了正确的节点,设置diffuse.contents的第一个材料将取代纹理地图与您的颜色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47810365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档