2017-10-12 2 views
0

In meinem Szeneneditor habe ich Cube mit einer gelben Textur mit dem Namen des Cubes.Ändern Sie das Material des Scn-Objekts programmgesteuert

Wie kann ich das Material des Cubes im Code ändern?

Grundsätzlich sollte ich wie folgt aussehen:

let scene = SCNScene(named: "art.scnassets/cubeScene.scn")! 

var cube = scene.rootNode.childNodes(named:"cube") 

cube.diffuse.contents = UIImage(named: "grid.png") 

Aber das funktioniert nicht. Was wäre der richtige Weg?

Antwort

1

Der Code in Ihrer Frage nicht kompiliert drei Gründe:

  1. childNode(named:)childNode(withName:recursively:) sein sollte. Es gibt sowohl einen umbenannten als auch einen fehlenden Parameter.

  2. Der Wert von childNode(withName:recursively:) zurückgegeben werden, sind ein optional Knoten (SCNNode?) - da es keinen Knoten mit diesem Namen sein könnte.

  3. SCNNode hat keine diffuse Eigenschaft. Ein Knoten könnte haben eine geometry und eine Geometrie könnte haben eine firstMaterial. SCNMaterial hat eine diffuse Eigenschaft.

Ihre Bedürfnisse Je nach, die letzte Zeile könnte in etwa so aussieht:

cube?.geometry?.firstMaterial?.diffuse.contents = /* ... */ 

Hinweis alle Fragezeichen:

  • Es gibt ein Fragezeichen nach cube, weil es könnte Es existiert kein Knoten mit diesem Namen.
  • Es gibt ein Fragezeichen nach geometry, da nicht jeder Knoten eine Geometrie hat. Einige Knoten haben Licht oder eine Kamera. Einige Knoten sind nur ein Teil der Knotenhierarchie.
  • Es gibt ein Fragezeichen nach firstMaterial, da nicht jede Geometrie ein Material hat. Außerdem haben einige Geometrieelemente mehrere materials.
Verwandte Themen