0
votes

Déplier le cube dans SceneKit

J'essaie de créer une application simple qui montre un cube se dépliant dans un plan à 6 faces, les faces s'ouvrant à la fois vers l'intérieur et vers l'extérieur. Voici une vidéo .

Est-ce que cela peut être fait dans le cadre SceneKit comme on m'a dit que cela ne peut pas être fait, mais cela doit être fait dans un logiciel 3D, exporté sous forme de fichier fbx puis importé dans Unity. Je ne suis pas un développeur d'applications, je veux juste être sûr. Merci.


1 commentaires

Avez-vous essayé de créer votre cube à partir de quads (GameObject -> 3d -> Object -> Quad),


3 Réponses :


1
votes

Avez-vous essayé de créer votre cube à partir de quads (GameObject -> 3d -> Object -> Quad). Ensuite, vous pouvez parent chacun des quads à un gameObject vide positionné à l'endroit où vous voulez que la face du cube pivote. Ensuite, faites de tous ces gameObjects un enfant d'un parent "Cube". Ensuite, vous pouvez simplement utiliser l'animateur intégré à Unity pour faire pivoter chaque face autour de son pivot.


0 commentaires

0
votes

Si la question se résume à "Est-il vrai que cela ne peut pas être réalisé avec du code seul et qu'un outil 3D doit être utilisé?" alors la réponse est non.

Cet effet peut être réalisé par programmation sans aucun élément 3D.


0 commentaires

0
votes

Vous pouvez déplier ou désassembler un cube polygonal non seulement dans Autodesk Maya (puis l'exporter au format fbx ou usdz ), mais vous pouvez également le faire en utilisant 6 plans carrés dans SceneKit ou dans Unity. Il est important de dire que vous devez positionner un point de pivot de chaque plan carré sur son bord (par défaut, le point de pivot est centré). Ensuite, vous devez animer une rotation de 90 degrés pour chaque plan.

 entrez la description de l'image ici

Voici un code Swift expliquant comment vous pouvez le faire en utilisant le module SceneKit:

import SceneKit

class ViewController: UIViewController {

   @IBOutlet var sceneView: SCNView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        sceneView.autoenablesDefaultLighting = true
        
        let scene = SCNScene()
        sceneView.scene = scene
        sceneView.allowsCameraControl = true
        sceneView.backgroundColor = UIColor.black
        
        // FIRST SIDE OF CUBE
        let planeNode_01 = SCNNode()
        planeNode_01.geometry = SCNPlane(width: 1.0, height: 1.0)
        planeNode_01.geometry?.firstMaterial?.isDoubleSided = true
        planeNode_01.geometry?.firstMaterial?.lightingModel = .lambert
        planeNode_01.geometry?.firstMaterial?.diffuse.contents = UIColor.red
        planeNode_01.position.z = -0.5

        planeNode_01.simdPivot.columns.3.y = -0.5      // shifts pivot point
        planeNode_01.eulerAngles.x = CGFloat.pi / 4    // in radians
        scene.rootNode.addChildNode(planeNode_01)
        
        // SECOND SIDE OF CUBE
        let planeNode_02 = SCNNode()
        planeNode_02.geometry = SCNPlane(width: 1.0, height: 1.0)
        planeNode_02.geometry?.firstMaterial?.isDoubleSided = true
        planeNode_02.geometry?.firstMaterial?.lightingModel = .lambert
        planeNode_02.geometry?.firstMaterial?.diffuse.contents = UIColor.green

        planeNode_01.simdPivot.columns.3.y = -0.5       // shifts pivot point
        planeNode_02.eulerAngles.x = CGFloat.pi / 2     // in radians
        scene.rootNode.addChildNode(planeNode_02)

        // THIRD SIDE OF CUBE
        // ...
    }
}

 entrez la description de l'image ici


0 commentaires