transform.lookat sur axes séparés

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Duality
Messages : 13
Inscription : 16 Jan 2020 21:01

transform.lookat sur axes séparés

Message par Duality » 27 Jan 2021 13:14

Bonjour

J'essaie de faire une tourelle qui pointe toujours dans la direction du joueur.

Ma tourelle à des axes pan(axe horizontal) et tilt(axe vertical) "séparés" . Ça me permet d'avoir un mouvement du modèle 3D cohérent avec sa construction (pensez aux tourelles de char par exemple)

La hiérarchie:
Socle
  • pan(empty)
    base qui tourne(mesh)
    • tilt(empty)
      canon (mesh)
J'arrive à orienter la tourelle sur le plan horizontal seul pour le pan

Code : Tout sélectionner

public Transform Pan;
public Transform Tilt;
void FixedUpdate()
{  
    Pan.LookAt(new Vector3(0, Pan.position.y, Target.position.z));
    Pan.transform.Rotate(0, 90, 0); //pour que l'orientation du mesh coïncide avec l'empty
}   
Mais je n'arrive absolument pas à faire la même chose sur le plan vertical pour le tilt. Ça fait 4h que je bute sur ce point. Du coup je me demande si lookat est bien approprié pour faire ça ?

Avatar de l’utilisateur
Max
Messages : 8177
Inscription : 30 Juil 2011 13:57
Contact :

Re: transform.lookat sur axes séparés

Message par Max » 27 Jan 2021 16:56

Bonjour,

tu est sur la bonne piste. Mais essais ce genre de code, cela devait servir de base:

Code : Tout sélectionner

    public Transform target;
    public Transform pan;  // le transform du pivot de la tourelle
    public Transform tilt;
    public float turnSpeed = 6.5f;  // vitesse de rotation de la tourelle
    
    // Update is called once per frame
    void Update()
    {
        Vector3 dir = target.position - pan.position;
        Quaternion lookRotation = Quaternion.LookRotation(dir);
        Vector3 rotation = Quaternion.Lerp(pan.rotation, lookRotation, Time.deltaTime * turnSpeed).eulerAngles;
        pan.rotation = Quaternion.Euler(0f, rotation.y, 0f);
        // le canon en site
        tilt.localRotation = Quaternion.Euler(lookRotation.eulerAngles.x, 0, 0);
    }
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Duality
Messages : 13
Inscription : 16 Jan 2020 21:01

Re: transform.lookat sur axes séparés

Message par Duality » 28 Jan 2021 20:21

Merci :)

Effectivement ça marche mieux comme ça. Du coup j'ai intégrer l'idée d'interpolation avec une variable de vitesse pour l'axe vertical, ça fait un bel effet (et ça laisse une chance au joueur) :super:

Bon, je comprends pas tout encore. J'ai beaucoup de mal à cerner ces histoire de rotation et translation dans Unity, savoir quand utiliser quelle fonction etc.

Par exemple, ici, je savais qu'il y avait un truc avec la rotation local pour l'axe vertical mais j'aurais jamais eu l'idée de ce code à base de quaternion.lookrotation.

Répondre

Revenir vers « Scripting »