繁体   English   中英

调用所有父节点和子节点 - SceneKit

[英]Calling all parent and child nodes - SceneKit

我有一个 3D 汽车对象,上面有一些平移和点击手势,一切正常。 问题是当我将它放大为汽车并且有很多部分时,我发现自己需要特定的角度让相机查看每个部分,因此我编写了所有父节点和子节点来指定它们中的每一个。 但我觉得这不是一个好的做法。 有没有另一种方法可以做到这一点?

let parentNodeName = result.node.parent?.name
        
        
        if parentNodeName == "up-side"{
            scnCameraOrbit.eulerAngles.x = 2.3 + Float.pi
            scnCameraOrbit.eulerAngles.y =  Float.pi * 1.0
        }
        else if parentNodeName == "front-side"{
            if nodeName == "window-front"{
                scnCameraOrbit.eulerAngles.x = 2.8 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi + 3.16
                           }
          else  if nodeName == "hood"{
                scnCameraOrbit.eulerAngles.x = 2.95 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi + 3.16
            }
          else  if nodeName == "bumper-front"{
                scnCameraOrbit.eulerAngles.x = 3.45 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi + 3.16
            }
            else{
                scnCameraOrbit.eulerAngles.x = 3.45 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi + 3.16
            }
        }
            else if parentNodeName == "back-side"{
            if nodeName == "window-rear"{
                scnCameraOrbit.eulerAngles.x = 2.9 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi * 1.0
            }
            else if nodeName == "bumper-rear"{
                scnCameraOrbit.eulerAngles.x = 3.4 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi * 1.0
            }
            else if nodeName == "trunk"{
                scnCameraOrbit.eulerAngles.x = 3.0 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi * 1.0
            }
            else{
                 scnCameraOrbit.eulerAngles.x = 3.4 + Float.pi
                scnCameraOrbit.eulerAngles.y =  Float.pi * 1.0
            }
            }
            else if parentNodeName == "left-side"{
            scnCameraOrbit.eulerAngles.x = -Float.pi * 0.0
            scnCameraOrbit.eulerAngles.y =  -3 * Float.pi * 1.2    
            }
            else if parentNodeName == "right-side"{
            scnCameraOrbit.eulerAngles.x = -Float.pi * 0.0
            scnCameraOrbit.eulerAngles.y =  -2 * Float.pi * 1.2
            }
        else{
            return
        }

IF 测试仅在命中测试(单击)时调用一次,对吗? 如果是这样的话...

为了避免一些嵌套 IF 的复杂性,您可以尝试一些枚举技术 <24701075>,这篇文章中有很多示例 - 请仔细阅读,其中一些已经过时并且新的 Swift 功能可用。 您将需要 2 组(我相信),一组用于父节点名称,然后一组用于节点名称。 不确定效率,但清晰度会提高......意见各不相同,但代码可读性和避免调试问题通常对我来说是一个更高的优先级,除非性能是一个真正的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM