Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从SceneKit中的.dae文件访问文本元素?_Ios_Objective C_Swift_Scenekit_Skscene - Fatal编程技术网

Ios 如何从SceneKit中的.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" } //

我有一个.dae文件,它是奖牌的形状。现在这个.dae文件有了一个label元素。我想加载这个.dae文件,并想在运行时更新该标签上的文本,以便用户名出现

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
    }

还有其他的方法吗?