IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Difficulté de la rotation 2D


Sujet :

Unity

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut Difficulté de la rotation 2D
    Bonjour,

    Je suis entrain de créer un jeux en 2D vus de dessus mais j'ai un problème je n'arrive pas à faire faire une rotation de mon joueur grace à la souris j'ai un script qui ne marche que a moitier je souhaiterais savoir quesqui ne vas pas dans mon script

    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
    61
    62
    63
    64
    65
    66
    67
     
    using UnityEngine;
    using System.Collections;
     
    public class Movement : MonoBehaviour
    {
     
        public float speedH = 2.0f;
        public float speedV = 2.0f;
     
        private float yaw = 0.0f;
        private float pitch = 0.0f;
     
        private float speed;
     
        private Rigidbody2D rb2d;
     
        void Start()
        {
            this.rb2d = GetComponent<Rigidbody2D>();
     
            this.rb2d.isKinematic = true;
     
            this.speed = 5.0f;
        }
        void FixedUpdate()
        {
            this.Move();
            this.Turn();
        }
     
        private void Move()
        {
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.position += Vector3.left * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.position += Vector3.right * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                transform.position += Vector3.down * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                transform.position += Vector3.up * speed * Time.deltaTime;
            }
        }
     
        private void Turn()
        {
            Vector3 mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * 10f);
     
            float angle = AngleBetweenPoints(transform.position, mouseWorldPosition);
     
     
            transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle));
        }
     
        private float AngleBetweenPoints(Vector2 a, Vector2 b)
        {
            return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
        }
     
    }
    Merci pour votre aide
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour, ce code, et les composants "2d", sont fait pour marcher pour une vue latérale (x gauche droite, y haut bas, z utilisé pour la rotation).

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Bonjour,
    Je suis désoler je doit être un peut bête ^^ j'ai pas tous a fait compris tu me dit d'utiliser l'axe Z pour ma rotation mais je l'utilise déjà :o
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  4. #4
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Non c'est moi, je n'ai pas été clair.
    J'image que ta camera doit pointée vers le sol dans l'axe y (je me trompe peut-être)
    Cependant, l'utilisation des composant 2D d'unity est prévu pour fonctionner avec la camera pointant vers "l'avant", sur l'axe z.
    Il faut que tu rotate ton monde de manière à ce que quand tu clique sur le petit bouton 2D de la fenêtre Scene, tu te retrouves dans le bon sens.

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    J'ai déjà cliquez sur 2D sur ma scene ^^
    Nom : Capture.PNG
Affichages : 518
Taille : 44,3 Ko
    Après ça viens peut être de mon code non ?
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  6. #6
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    J'ai plus l'impression que ça vient du fait que ta caméra soit enfant de ton perso (:

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Il y a un nouveau problème la rotation n'est toujours pas bien mdr je fait une vidéo pour que tu vois ce que ça fait :p
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pour la rotation, il suffit de faire angle - 180 et hop, ça passe (car un cercle complet, c'est 360°, donc pour "inverser" il faut juste déplacer de 180 )
    Pour le déplacement, il faut prendre l'angle, et le transformer en un vecteur (c'est jouer avec un cosinus et un sinus (pour s'aider, il suffit de prendre le cercle trigonométrique)). Ensuite, grâce à ce vecteur, il ne reste plus qu'à l'additionner à la position du personnage. Et voilà, le tour est joué.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    C'est vrai merci à tous
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  10. #10
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Sauf que je n'arrive pas à faire pour le déplacement tu me dit de transformer angle en Vecteur sauf que angle n'est qu'un float donc il manque des donnée (je ne comprend pas tous ^^)
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Prenons donc notre cercle ensemble

    (Merci Wikipedia)

    t est notre angle. Pour obtenir le point en X, il faut faire cos t et pour le point en Y sin tBon, ok, comme ça, ce n'est peut être pas évident, mais j'ose croise avoir appris cela au collège/lycée.

    Comment vérifier et deviner soit même la chose ?
    Prenons l'angle 0. Notre direction est vers la droite. Si je fais
    cos 0 -> 1
    sin 0 -> 0

    Prenons l'angle 90.
    cos 90 -> 0
    sin 90 -> 1

    Et ainsi de suite, ça marche (vive l’explication ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    J'ai fait plein de test avec mes souvenir de ma 3°(ils sont pas nombreux ^^) mais rien n'est concluent
    Voilà mon dernier test
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    using UnityEngine;
    using System.Collections;
     
    public class Movement : MonoBehaviour
    {
     
        //public float speedH = 2.0f;
        //public float speedV = 2.0f;
     
        //private float yaw = 0.0f;
        //private float pitch = 0.0f;
     
        private float speed;
     
        private float rotSpeed;
     
        Vector3 mouseWorldPosition;
     
        float angle;
     
     
        void Start()
        {
            rotSpeed = 180f;
            this.speed = 2.0f;
        }
        void FixedUpdate()
        {
            this.Move();
            this.Turn();
        }
     
        private void Move()
        {
            Vector3 rot = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
            float y = Mathf.Sin(rot.z);
            float x = Mathf.Cos(rot.z);
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.position += new Vector3(-x,0,0) * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.position += new Vector3(x, 0, 0) * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                transform.position += new Vector3(0,y,0) * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                transform.position += new Vector3(0, -y, 0) * speed * Time.deltaTime;
            }
     
        }
     
        private void Turn()
        {
            angle = AngleBetweenPoints(transform.position, mouseWorldPosition);
            mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * 5f);
     
            transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle - rotSpeed));
        }
     
        private float AngleBetweenPoints(Vector2 a, Vector2 b)
        {
            return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
        }
     
    }
    Merci pour vos aide même si je suis un peut bête a des moment ^^
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  13. #13
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    salut 1
    j'ai pas tout décortiqué le code mais si tu dois gérer des matrices (apparemment ) il faut s'assurer que tu effectues une conversion correcte en s'adressant aux bons éléments ligne,colonne de la matrice (parce que vois l'utilisation de quaternion dans le code...)

    peut-être cet article de Wikipedia va-t-il t'éclairer
    https://fr.wikipedia.org/wiki/Quater...ans_l%27espace

  14. #14
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Les x et y que vous calculez de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float y = Mathf.Sin(rot.z);
    float x = Mathf.Cos(rot.z);
    Vous permettes d'obtenir un vecteur Vector2(x,y) en direction de votre curseur.
    Lorsque vous déplacez votre personnage, il faut utiliser ce vecteur (unitaire, donc pas besoin de normalisation), qui indique la direction du personnage (il se dirige toujours en direction du curseur).

    Du coup, si vous voulez aller en avant (vous rapprocher du curseur), il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Input.GetKey(KeyCode.UpArrow))
    {
        transform.position += direction * speed * Time.deltaTime;
    }
    Si vous voulez à gauche, il faut faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Input.GetKey(KeyCode.LeftArrow))
    {
        transform.position += Vector2(y,x) * speed * Time.deltaTime;
    }
    (Ou encore, simplement ajouter 90 à l'angle et refaire le calcul du sinus/cosinus, car en réalité, je ne suis pas sur de cette dernière proposition ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  15. #15
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    On peut aussi faire sans la trigo, merci unity (:
    Plutôt que de se servir de l'espace global, on peut appliquer les transformations en local.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transform.position += Vector3.right * speed * Time.deltaTime;
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transform.position += transform.right * speed * Time.deltaTime;
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    using UnityEngine;
    using System.Collections;
     
    [RequireComponent(typeof(Rigidbody2D))]//Induit les Components devant se trouver sur le même GameObject
    public class Movement : MonoBehaviour
    {
    	[Header("Reference")]//Ajoute un peut de beauté (:
    	public Camera targetCamera = null;
     
    	[Header("Parameter")]
    	public float speed;
     
    	private Rigidbody2D rb2d;
     
    	void Start()
    	{
    		this.rb2d = GetComponent<Rigidbody2D>();
     
    		this.rb2d.isKinematic = true;
     
    		this.speed = 5.0f;
    	}
     
    	void FixedUpdate()
    	{
    		this.Move();
    		this.Turn();
    	}
     
    	void Update()//C'est pas vraiment propre de faire ça ici, ce n'est pas le rôle donné à cette classe, mais c'est pour l’exemple
    	{
    		Vector3 camPos = targetCamera.transform.position;
    		Vector3 currentPos = transform.position;
    		targetCamera.transform.position = new Vector3(currentPos.x, currentPos.y, camPos.z);
    	}
     
    	private void Move()//On ne prend plus l'espace global mais la position du joueur 
    	{
    		if(Input.GetKey(KeyCode.UpArrow))//La configuration des touches, et de l'angle dans la méthode Turn, vont dépendre de l'axe par défaut de ton personnage, je ne sais pas si il y a une règle.
    		{
    			transform.position += transform.right * speed * Time.fixedDeltaTime;//Time.fixedDeltaTime car cette méthode est appelée sur le FixedUpdate
    		}
    		if(Input.GetKey(KeyCode.DownArrow))
    		{
    			transform.position += -transform.right * speed * Time.fixedDeltaTime; (le transform ne propose pas left et down)
    		}
    		if(Input.GetKey(KeyCode.RightArrow))
    		{
    			transform.position += -transform.up * speed * Time.fixedDeltaTime;
    		}
    		if(Input.GetKey(KeyCode.LeftArrow)) 
    		{
    			transform.position += transform.up * speed * Time.fixedDeltaTime;
    		}
    	}
     
    	private void Turn()
    	{
    		Vector3 mouseWorldPosition = targetCamera.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * 10f);
     
    		float angle = AngleBetweenPoints(transform.position, mouseWorldPosition);
     
    		transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle + 180f));//Les 180°, en partant du principe qu'x soit son axe par défaut   O->
    	}
     
    	private float AngleBetweenPoints(Vector2 a, Vector2 b)
    	{
    		return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
    	}
     
    }

  16. #16
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Les deux solution donner ne résous pas mon problème j'ai essayer pour la seconde d'inverser up et right mais toujours rien
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  17. #17
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    J'ai fait des test voila où j'en suis il y a du changement



    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    using UnityEngine;
    using System.Collections;
     
    public class Movement : MonoBehaviour
    {
     
        //public float speedH = 2.0f;
        //public float speedV = 2.0f;
     
        //private float yaw = 0.0f;
        //private float pitch = 0.0f;
     
        private float speed;
     
        private float rotSpeed;
     
        Vector3 mouseWorldPosition;
     
        float angle;
     
     
        void Start()
        {
            rotSpeed = 180f;
            this.speed = 2.0f;
        }
        void FixedUpdate()
        {
            this.Turn();
            this.Move();
        }
     
        private void Move()
        {
            if (Input.GetKey(KeyCode.UpArrow))//La configuration des touches, et de l'angle dans la méthode Turn, vont dépendre de l'axe par défaut de ton personnage, je ne sais pas si il y a une règle.
            {
                Debug.Log("J'appui sur up");
                transform.position += transform.right * speed * Time.fixedDeltaTime;//Time.fixedDeltaTime car cette méthode est appelée sur le FixedUpdate
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                Debug.Log("J'appui sur down");
                transform.position += -transform.right * speed * Time.fixedDeltaTime; //(le transform ne propose pas left et down)
    		}
            if (Input.GetKey(KeyCode.RightArrow))
            {
                Debug.Log("J'appui sur right");
                transform.position += -transform.up * speed * Time.fixedDeltaTime;
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                Debug.Log("J'appui sur left");
                transform.position += transform.up * speed * Time.fixedDeltaTime;
            }
     
        }
     
        private void Turn()
        {
            angle = AngleBetweenPoints(transform.position, mouseWorldPosition);
            mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * 5f);
     
            transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle - rotSpeed));
        }
     
        private float AngleBetweenPoints(Vector2 a, Vector2 b)
        {
            return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
        }
     
    }
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  18. #18
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    angle = AngleBetweenPoints(transform.position, mouseWorldPosition);
    mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * 5f);
    Quelle est votre raison de calculer mouseWorldPosition après son utilisation dans AngleBetWeenPoints ?

    Pourquoi utilisez vous comme position Input.mousePosition + Vector3.forward * 5 ?
    D'ailleurs, si vous pensez que cette position est juste, vous devriez afficher un point à cet endroit

    Et dernièrement. Peut être vous devriez afficher (dans la console de débogage) l'angle trouvé.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  19. #19
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Je fait ça car c'est la seul manière que j'ai trouver pour faire une rotation normale ^^ j'ai trouver d'autre solution
    L’Échec est la preuve que l'on à essayer
    Les question bête n'existe pas la seul chose bête c'est la personne qui n'auras pas poser la question

  20. #20
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par TheYoungGeek43 Voir le message
    ... j'ai trouver d'autre solution
    Il me semblait que tu 'en étais sorti.

    Le problème ici est que j'ai l'impression que tu y vas à tâtons.
    Il est très important de déterminer clairement ce que tu veux (au vu des question, on ne sent pas que l'objectif soit bien défini, mais peut être que ça viens de moi)
    Comme dit plus haut, Unity fournit un grand nombre de méthode permettant de se "passer des mathématiques" si c'est pas ton point fort.

    Quelques points qui t'aideront sans doute dans ta tâche:
    -A quel axe correspond quelle direction
    -la hiérarchie des GameObjects dans la scène et leurs influences
    -L'espace global et local
    -Les différentes méthodes dont dispose les classes/structures Transform, Vector3(Vector2 en 2D j'imagine), Quaternion et Mathf

    PS Juste à titre d'exemple, regarde la méthode LookAt de la classe Transform

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2000] clGdi32 - fonction rotate - Difficultés rencontrées sur certaines images
    Par tgrandje dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/03/2016, 08h18
  2. Rotation de Bitmap -> ScanLine
    Par jujuesteban dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2003, 15h11
  3. Rotation d'un bouton ?
    Par ken_survivant dans le forum Composants
    Réponses: 3
    Dernier message: 01/04/2003, 18h16
  4. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59
  5. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo