簡體   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