File tree Expand file tree Collapse file tree
Sources/GLTFSceneKit/schema/extensions/VRM Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -156,6 +156,32 @@ struct GLTFVRM_GLTFVRMExtension: GLTFCodable {
156156 enum CodingKeys : String , CodingKey {
157157 case data = " VRM "
158158 }
159+
160+ func checkNameUniqueness( rootNode: SCNNode , name: String ) -> Bool {
161+ var nameCount : Int = 0
162+ rootNode. enumerateHierarchy { node, _ in
163+ if node. name == name {
164+ nameCount += 1
165+ }
166+ }
167+
168+ return nameCount <= 1
169+ }
170+
171+ func getUniqueName( targetNode: SCNNode , rootNode: SCNNode ) -> String {
172+ let orgName = targetNode. name ?? " node "
173+ var name = orgName
174+
175+ var nameIsUnique = checkNameUniqueness ( rootNode: rootNode, name: name)
176+ var postfix : Int = 1
177+ while !nameIsUnique {
178+ name = " \( orgName) - \( postfix) "
179+ nameIsUnique = checkNameUniqueness ( rootNode: rootNode, name: name)
180+ postfix += 1
181+ }
182+
183+ return name
184+ }
159185
160186 func didLoad( by object: Any , unarchiver: GLTFUnarchiver ) {
161187 guard let data = self . data else { return }
@@ -269,10 +295,8 @@ struct GLTFVRM_GLTFVRMExtension: GLTFCodable {
269295 return
270296 }
271297
272- // TODO: Handle empty name and name conflicts
273- guard let meshName = meshNode. name else {
274- return
275- }
298+ let meshName = getUniqueName ( targetNode: meshNode, rootNode: scene. rootNode)
299+ meshNode. name = meshName
276300
277301 for i in 0 ..< meshNode. childNodes. count {
278302 let keyPath = " / \( meshName) .childNodes[ \( i) ].morpher.weights[ \( bind. index) ] "
You can’t perform that action at this time.
0 commit comments