Ios 如何从SceneKit中的.dae文件访问文本元素?
我有一个.dae文件,它是奖牌的形状。现在这个.dae文件有了一个label元素。我想加载这个.dae文件,并想在运行时更新该标签上的文本,以便用户名出现Ios 如何从SceneKit中的.dae文件访问文本元素?,ios,objective-c,swift,scenekit,skscene,Ios,Objective C,Swift,Scenekit,Skscene,我有一个.dae文件,它是奖牌的形状。现在这个.dae文件有了一个label元素。我想加载这个.dae文件,并想在运行时更新该标签上的文本,以便用户名出现 let originalNode = scene?.rootNode.childNode(withName: "label", recursively: true) if let _text = originalNode?.geometry as? SCNText { _text.string = "Mohsin Khan" } //
let originalNode = scene?.rootNode.childNode(withName: "label", recursively: true)
if let _text = originalNode?.geometry as? SCNText {
_text.string = "Mohsin Khan"
}
// another way i tried
let originalNode = scene?.rootNode.childNode(withName: "label", recursively: true)
(originalNode?.geometry as! SCNText).string = "Mohsin Khan"
我试过各种方法,但都不管用。为了
originalNode?.geometry as! SCNText // returning nil
附加显示元素的xcode屏幕截图:
SCNText
是特定于SceneKit的。如果将三维文本导出为Collada文件,它将与任何其他几何体(面和顶点)一样,根本不会是动态的。从Collada文件中检索到的内容无法创建SCNText
实例。我遇到过类似的情况。。。请删除标签节点并替换自己的节点,或者编辑.dae文件并删除标签。然后你可以在任何你想放的地方添加一个SCNText。类似于此功能的功能允许您反弹、旋转和/或单独为所有字符上色。您必须对其进行一些处理,才能将其放入正确的位置,并且名称字符串的长度会有所不同。这使它变得复杂-一个解决方案是将它集中到一个固定的宽度[---吉姆---],并且不要超过最大长度。这也有它的挑战,但希望这能让你进入正轨。这段代码对空格和换行符(breakAt)进行了一些特殊处理,您可以删除它们
func addSCNText(vGroupNode: SCNNode, vPosition: SCNVector3, vScale: SCNVector3, vString: String)
{
var vX: Float = 0
for char in vString
{
let textGeometry = SCNText(string: String(char), extrusionDepth: 1.0)
textGeometry.font = AppColor.endWaveFont!
textGeometry.flatness = 0.2
textGeometry.firstMaterial?.diffuse.contents = UIColor.red
let textNode = SCNNode(geometry: textGeometry)
textNode.position.x = vX
vX += 12
if(breakAt != 0)
{
vGroupNode.addChildNode(textNode)
}
else
{
if(char != " ")
{
vGroupNode.addChildNode(textNode)
}
}
}
gNodes.gameNodes.addChildNode(vGroupNode)
vGroupNode.position = vPosition
vGroupNode.scale = vScale
}
还有其他的方法吗?