[DB-AL] [RESOLU]Rotation d'un objet parent autour du pivot d'un objet enfant

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Danytro
Messages : 7
Inscription : 20 Juil 2018 21:14

[DB-AL] [RESOLU]Rotation d'un objet parent autour du pivot d'un objet enfant

Message par Danytro » 20 Juil 2018 21:44

Bonjour,
Je souhaite faire pivoter un hexagone régulier autour d'une de ses 6 arêtes(pas toujours la même).
Etant donné que l'objet parent (l'hexagone) est constitué de 6 objets enfants (triangles équilatéraux) ayant les bons axes de pivot, je pensais me servir des objets enfants pour faire pivoter l'hexagone autour de ses arêtes.
Mais je ne trouve pas comment procéder.
J'ai vu sur ce forum que pour effectuer la rotation d'un objet autour d'un axe différent de x, y ou z il fallait encapsuler l'objet dans un GameObject vide ce qui permettait de définir le pivot souhaité sur l'objet vide. Il s'agit donc de la rotation d'un objet enfant (et son parent) autour d'un pivot de l'objet parent.
Je ne pense pas pouvoir utiliser cette méthode car dans mon cas le pivot change selon le contexte.

Pourriez-vous m'aider ?
Merci bien pour votre attention.
Dernière édition par Danytro le 15 Août 2018 12:31, édité 2 fois.

Danytro
Messages : 7
Inscription : 20 Juil 2018 21:14

Re: [DB-AL] Rotation d'un objet parent autour du pivot d'un objet enfant

Message par Danytro » 21 Juil 2018 08:03

Bonjour,
La nuit portant conseil, je pense avoir trouvé la solution:
Je créé un GameObject vide parent de l'hexagone et de 6 autres GameObjects vides, chacun ayant comme axe de rotation une des arêtes de l'hexagone.
Lorsque je veux faire pivoter l'hexagone:
1) Je change la hiérarchie de l'hexagone en le passant enfant d'un des 6 autres GameObjects vides selon le pivot que je souhaite utiliser.
2) Je pivote le GameObject vide et son enfant (l’hexagone).
3) Je reviens à la hiérarchie initiale.
Voilà la théorie, j'attends votre avis ou bien la mise en pratique pour passer ce sujet résolu.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Rotation d'un objet parent autour du pivot d'un objet enfant

Message par Alesk » 21 Juil 2018 12:18

Sans utiliser de GameObject supplémentaire ou de bidouillages de ta hiérarchie, tu peux essayer avec la méthode RotateAround ;)

https://docs.unity3d.com/ScriptReferenc ... round.html

Danytro
Messages : 7
Inscription : 20 Juil 2018 21:14

Re: [DB-AL] Rotation d'un objet parent autour du pivot d'un objet enfant

Message par Danytro » 15 Août 2018 12:25

Voilà comment je fais pour faire pivoter le jeton de forme hexagonale autour d'une de ces arêtes :
- Je créé une animation de pivotement pour chaque arête du jeton
- Je créé un évènement à la fin de l'animation du jeton
- Je rattache à cet évènement la fonction FinduPivotement() de la classe Jeton ci-dessous

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jeton : MonoBehaviour {

    // Use this for initialization
    void Start ()
    {
        /* choix du pivot du Jeton
         * PivotBas = 2
         * PivotBasDroite = 3
         * PivotBasGauche = 4
         * PivotHaut = 5
         * PivotHautDroite = 6
         * PivotHautGauche = 7
         */
        int pivot = 2; //choix d'une des arêtes comme pivot du jeton
        GameObject duplicate = Instantiate(transform.GetChild(pivot).gameObject, GameObject.Find("0_0").transform);
        transform.SetParent(duplicate.transform);
        duplicate.SetActive(true);
    }

    // Utilisé comme évènement d'animation à la fin du pivotement du jeton
    void FinduPivotement()
    {
        Transform pivot = transform.parent;
        transform.SetParent(GameObject.Find("0_0").transform);
        Destroy(pivot.gameObject);
    }    
}

Répondre

Revenir vers « (C#) CSharp »