调用所有父级和子级节点-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的某些复杂性,您可以尝试一些枚举技术,本文中有很多示例-请仔细阅读,其中一些已过时,并且可以使用新的Swift功能。您需要2套(我相信),一组用于父节点名称,然后一组用于节点名称。不确定效率,但清晰度会提高...意见不一,但除非性能是一个真正的问题,否则对我而言,代码可读性和避免调试问题通常是我的重中之重。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...