Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

assembler des cubes


Sujet :

Unity

  1. #21
    Membre éprouvé
    Allez on va essayez un peu la pédagogie

    Et quand je déplace après compilation le troisième cube les 2 cubes enfants se déplacent bien ensemble.
    Mais si je ne passe pas le troisième cube, les cubes se séparent.
    Juste la tout va bien, c'est le but de la relation parent/enfant:

    https://docs.unity3d.com/ScriptRefer...rm-parent.html
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Changing the parent will modify the parent-relative position, scale and rotation but keep the world space position, rotation and scale the same.



    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    J'éssayé le code suivant :	
    	{
    		cube2.transform.parent = cube1.transform;
    		cube1.transform.parent = cube2.transform;
    	}
    Mais le code ne fonctionne pas.


    On va faire par étape:

    1. Que veux-tu faire déjà au départ avec ce bout de code?
    2. Quel est le résultat obtenu et en quoi cela ne répond pas à ce que tu voulais?
    3. Montre nous tes codes qui déplacent tes cubes en entier voir une vidéo de ton souci, on est pas des devins ni dans ta tête, faut que tu nous en montre plus que 3 phrases avec un "cela ne fonctionne pas, merci pour votre aide"
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  2. #22
    Nouveau Candidat au Club
    Bonjour à tous,

    Avec ce bout de code, je cherche à assembler 2 cubes entre eux lorsque on les déplace.
    Le résultat est que cela marche uniquement si on déplace le cube parent (voir Hierarchy).
    Les 2 cubes sont bien liés entre eux (ils se suivent quand on les déplace).
    Le problème est que si on déplace le cube enfant, celui-ci se déplace tout seul et n'est pas attaché au cube parent.
    Voici mon code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    public class dragging : MonoBehaviour
    {
        GameObject movingObject;
        Vector3 positionZero;
        Plane plane;
     
        /// <summary>
        /// Update the manager.
        /// </summary>
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                Ray mouseRay = GetMouseRay();
                RaycastHit hit;
     
                if (Physics.Raycast(mouseRay.origin, mouseRay.direction, out hit))
                {
                    movingObject = hit.transform.gameObject;
                    plane = new Plane(Vector3.up, movingObject.transform.position);
                    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    float rayDistance;
                    plane.Raycast(ray, out rayDistance);
                    positionZero = movingObject.transform.position - ray.GetPoint(rayDistance);
                }
            }
     
            else if (Input.GetMouseButton(0) && movingObject)
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
     
                float rayDistance;
     
                if (plane.Raycast(ray, out rayDistance))
                {
    				movingObject.transform.position = ray.GetPoint(rayDistance) + positionZero;
                }
            }
     
            else if (Input.GetMouseButtonUp(0) && movingObject)
            {
                movingObject = null;
    	//		movingObject.transform.position.x =  Mathf.Round(transform.position.x / 26);
    	//    	movingObject.transform.position.y = Mathf.Round(transform.position.y / 26);
     
            }
        }
     
       private Ray GetMouseRay()
        {
            Vector3 mousePositionFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane);
            Vector3 mousePositionNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
            Vector3 mousePositionF = Camera.main.ScreenToWorldPoint(mousePositionFar);
            Vector3 mousePositionN = Camera.main.ScreenToWorldPoint(mousePositionNear);
     
    		Ray mouseRay = new Ray(mousePositionN, mousePositionF - mousePositionN);
     
    		return mouseRay;
        }
    }



    Le code marche parfaitement , j'ai aussi essayé d'importer un OBJ (pièce de tetris) avec le code (dragging) mais l'objet ne réagit pas.

    Merci pour votre aide,

    A+

  3. #23
    Membre éprouvé
    Salut,

    Pour ma part je vois 3 solutions:

    1. Comme dans ma vidéo, tu mets tes cubes dans un GO et quand tu sélectionnes un des cubes au lieu de bouger ce cube, tu fais bouger le parent ce qui aura pour effet donc de bouger tous les cubes dans ton parent
    2. Dans ton script tu référencies ton autre cube et quand tu sélectionnes pour bouger un cube, tu bouges en même temps l'autre cube de ce "delta mouvement"
    3. Tout comme tu avais commencé à essayer quand tu sélectionnes ton cube1 tu mets ton cube2 en enfant et inversement

    Tu auras surement d'autre soucis qui vont se pointer mais tu verras sur le moment.
    Par contre réfléchis à combien de cube ou autre que tu veux bouger en même temps je dirais, pour 2 cubes surement toute les solutions qu'on va te propose sont "fiables" mais après si tu veux pouvoir l'appliquer à 200 cubes d'un coup faudra avoir prévu le coup au début

    Edit: pour continuer sur la pédagogie, cela insinue que c'est à toi de regarder ce qu'on te propose, de réfléchir et de tester toi même la solution que tu penses maitriser et de revenir vers vous avec ton nouveau code/screenshot/vidéo pour nous montrer ou sont tes nouveaux soucis
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  4. #24
    Nouveau Candidat au Club
    Bonjour,

    Alors voilà, tout est dans la video suivante:



    Comme vous pouvez le voire, les 2 cube bougent ensemble lorsqu'on bouge le cube parent (cube 1).
    Si on clique sur le deuxième cube (objet enfant cube 2), celui-ci se désolidarise et part tout seul avec la souris.

    Si on re déplace le cube 1, le deuxième cube bouge bien, comme il faut.

    Ma question est la suivante :

    comment faire bouger le cube enfant (cube 2) avec le cube parent (cube 1)?

    Merci pour votre aide,

    J'espère que la vidéo vous aidera mieux que moi,

    A+

  5. #25
    Membre éprouvé
    Salut,

    La réponse est toujours la même, pour ma part je vois 3 solutions:

    1. Comme dans ma vidéo, tu mets tes cubes dans un GO et quand tu sélectionnes un des cubes au lieu de bouger ce cube, tu fais bouger le parent ce qui aura pour effet donc de bouger tous les cubes dans ton parent
    2. Dans ton script tu référencies ton autre cube et quand tu sélectionnes pour bouger un cube, tu bouges en même temps l'autre cube de ce "delta mouvement"
    3. Tout comme tu avais commencé à essayer quand tu sélectionnes ton cube1 tu mets ton cube2 en enfant et inversement

    Peut être que d'autre personne vont proposer d'autre solution sinon regarde ce dont je te parle, essaye de comprendre, fait des tests et revient avec de nouvelles questions
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  6. #26
    Nouveau Candidat au Club
    Merci pour votre aide,

    Je crée un troisième GameObject (capsule) et quand je déplace cette capsule (que je rends parent des 2 cubes), je fait bien bouger les 2 cubes ensemble.
    Par contre je n'arrive pas à le faire avec du code.

    Qu'entends-tu par "delta mouvement".

    Est-ce qu'il est obligatoire de faire l'inverse comme faire cube 2 parent du cube 1 (comme l'image ci-dessous)?



    Merci encore,

    A+

###raw>template_hook.ano_emploi###