设置 SCNNode 几何结构 属性
Setting SCNNode geometry property
我有一个 SCNNode,我正在使用以下方法将 .dae 文件中的几何图形应用到它:
func addNode(gridPosition: SCNVector3, row: Int, gamePlaneHeight: Float, sceneArray: [ObjectInfo]) -> SCNNode {
// Create a material using the model_texture.tga image
let carMaterial = SCNMaterial()
carMaterial.diffuse.contents = UIImage(named: "assets.scnassets/Textures/model_texture.tga")
carMaterial.locksAmbientWithDiffuse = false
// Create a clone of the Car node of the carScene - you need a clone because you need to add many cars
var carNode: SCNNode!
let randomNumb = AppDelegate().randRange(0, upper: sceneArray.count - 1)
let selectedObject = sceneArray[randomNumb]
carNode = selectedObject.objectscene.rootNode.childNodeWithName(selectedObject.objectname, recursively: false)!.clone() as SCNNode
carNode.scale = SCNVector3(0.5, 0.5, AppDelegate().randomBetweenNumbers(0.8, secondNum: 2.2))
carNode.name = selectedObject.objectname
carNode.position = gridPosition
carNode.position.y = carNode.position.y + gamePlaneHeight
// Set the material
carNode.geometry?.firstMaterial = carMaterial
return carNode
}
该方法大部分时间有效,但偶尔会在线上崩溃
carNode.geometry?.firstMaterial = carMaterial
有错误
fatal error: unexpectedly found nil while unwrapping an Optional value
warning: could not load any Objective-C class information from the dyld shared cache. This will significantly reduce the quality of type information available.
我不明白为什么,因为大多数时候它都有效。
carNode
是从 selectedObject.objectname
构建的。
如果 selectedObject.objectname
不存在于场景中,那么 childNodeWithName
将 return nil
。因为 carNode
是一个隐式展开的可选,Swift 将尝试展开 nil
并崩溃。
您应该使 carNode
可选 (var carNode: SCNNode?
) 或添加测试,例如 if carNode == nil { ... }
并尝试调试您的输入 (selectedObject
) 是什么以及它为什么不正确.
我有一个 SCNNode,我正在使用以下方法将 .dae 文件中的几何图形应用到它:
func addNode(gridPosition: SCNVector3, row: Int, gamePlaneHeight: Float, sceneArray: [ObjectInfo]) -> SCNNode {
// Create a material using the model_texture.tga image
let carMaterial = SCNMaterial()
carMaterial.diffuse.contents = UIImage(named: "assets.scnassets/Textures/model_texture.tga")
carMaterial.locksAmbientWithDiffuse = false
// Create a clone of the Car node of the carScene - you need a clone because you need to add many cars
var carNode: SCNNode!
let randomNumb = AppDelegate().randRange(0, upper: sceneArray.count - 1)
let selectedObject = sceneArray[randomNumb]
carNode = selectedObject.objectscene.rootNode.childNodeWithName(selectedObject.objectname, recursively: false)!.clone() as SCNNode
carNode.scale = SCNVector3(0.5, 0.5, AppDelegate().randomBetweenNumbers(0.8, secondNum: 2.2))
carNode.name = selectedObject.objectname
carNode.position = gridPosition
carNode.position.y = carNode.position.y + gamePlaneHeight
// Set the material
carNode.geometry?.firstMaterial = carMaterial
return carNode
}
该方法大部分时间有效,但偶尔会在线上崩溃
carNode.geometry?.firstMaterial = carMaterial
有错误
fatal error: unexpectedly found nil while unwrapping an Optional value
warning: could not load any Objective-C class information from the dyld shared cache. This will significantly reduce the quality of type information available.
我不明白为什么,因为大多数时候它都有效。
carNode
是从 selectedObject.objectname
构建的。
如果 selectedObject.objectname
不存在于场景中,那么 childNodeWithName
将 return nil
。因为 carNode
是一个隐式展开的可选,Swift 将尝试展开 nil
并崩溃。
您应该使 carNode
可选 (var carNode: SCNNode?
) 或添加测试,例如 if carNode == nil { ... }
并尝试调试您的输入 (selectedObject
) 是什么以及它为什么不正确.