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 :

tourner un personnage après le changement de scène


Sujet :

Unity

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 112
    Points : 48
    Points
    48
    Par défaut tourner un personnage après le changement de scène
    bonjour tout le monde, j'ai eu beaucoup de problèmes concernant la position d'un player entre les scènes. ce que j'ai maintenant est un player dans la bonne position mais dans la mauvaise direction, je veut que ce player soit en face de la caméra, je sais que je doit fixer les coordonnées de rotation mais je sais pas comment

    j'ai dèja essayer avec ce script mais il marche toujours pas

    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
    private float rotX = 0f;
    	private float rotY = 252f;
    	private float rotZ = 0f;
     
     
     
     
    	// Use this for initialization
    	void Start () {
     
    		DontDestroyOnLoad (transform.gameObject);
     
    		if (FindObjectsOfType(GetType()).Length > 1)
    		{
    			Destroy(gameObject);
    		}
            checkScene ();
     
    }
     
     
    	void checkScene(){
     
    			GameObject.Find("young").transform.rotation=  new Quaternion(rotX,rotY,rotZ);
     
     
    	}

  2. #2
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Bonjour Chemsoun

    Apparemment tu sembles avoir résolu ton soucis de DontDestroyOnLoad (je me réfère au post que tu avais ouvert sur ce sujet).
    Sinon, pour ce problème la, tu pars dans des choses un peu compliqué à mon gout.
    L'API d'Unity t'offre des fonctions toute faites pour ce genre de chose, genre LookAt. On ne peut pas faire plus simple

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Greg Latiner Voir le message
    Bonjour Chemsoun

    Apparemment tu sembles avoir résolu ton soucis de DontDestroyOnLoad (je me réfère au post que tu avais ouvert sur ce sujet).
    Sinon, pour ce problème la, tu pars dans des choses un peu compliqué à mon gout.
    L'API d'Unity t'offre des fonctions toute faites pour ce genre de chose, genre LookAt. On ne peut pas faire plus simple
    j'ai essayer avec LookAt mais c'est le même problème. le player ne tourne pas et il garde les même coordonnées de la scène precédente

    voici le 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
    private float rotX = 0f;
    	private float rotY = 180f;
    	private float rotZ = 0f;
     
    	//public Transform target;
     
     
    	// Use this for initialization
    	void Start () {
     
    		DontDestroyOnLoad (transform.gameObject);
     
    		if (FindObjectsOfType(GetType()).Length > 1)
    		{
    			Destroy(gameObject);
    		}
     
     
            checkScene ();
     
    }
     
     
    	void checkScene(){
     
     
    		if (Application.loadedLevel == 2) {
     
    			Vector3 targetPostition = new Vector3( rotX,rotY,rotZ) ;
    			transform.LookAt(targetPostition);
     
     
     
     
    		}
     
    	}

  4. #4
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Houlà, il faut que ton target soit celui de ta camera, avec un forçage lié à ton player sur l'axe des Y (si j'ai bien compris l'objectif que tu poursuis).
    (et puis j'ai l'impression que tu initie ton target avec des rotations, donc ça peut par marcher).

    Genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Vector3 pos = new Vector3( mycameratransform.position.x, transform.position.y, mycameratransform.position.z);
    		transform.LookAt(pos);

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    le personnage conserve encore ses coordonnées de la dernière scène. si seulement je pouvais récupérer ses coordonnées et lui faire une rotation ca serait plus simple et efficace je pense, j'ai déja utiliser la methode checkScene pour vérifier quelle est la scène en cours mais ça aussi ne fonctionne pas

    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
     
     
     
    void checkScene(){
     
     
    		if (Application.loadedLevel == 2) {
     
     
     
    			/Vector3 targetPostition = new Vector3( rotX,rotY,rotZ) ;
    			transform.LookAt(targetPostition);
     
     
    		}
     
    	}

  6. #6
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    C'est normal, ta fonction LookAt est dans Start(). Elle ne sera pas de nouveau exécutée après le chargement du niveau suivant.
    Pour cela il faut regarder du coté de OnLevelWasLoaded. (la doc, toujours la doc)

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    j'ai essayer assez des solutions mais aucune ne marche

    voici la dernière solution

    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
    void OnLevelWasLoaded(int level){
     
    		if (level == 2) {
     
    			Debug.Log ("level 2 ");
     
     
    			Debug.Log("y : " + GameObject.Find("young").transform.rotation.y);// affiche  y : 1
     
    			Vector3 vect = new Vector3(1,1,1);
    			transform.LookAt(vect);
     
    			Debug.Log("y : " + GameObject.Find("young").transform.rotation.y);// affiche  y : -0.6
     
     
    		}
     
     
     
    	}

  8. #8
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Bonjour Chemsoun,

    J'avoue ne pas trop comprendre ce que tu fais. Dans ce que je lis de ton dernier code, "si tu es dans le Level2, tu orientes ton Player vers la position 1,1,1".
    Quelle est la position de ton Player par rapport à cette coordonnée ? Je pensais que tu souhaitais une orientation vers la camera.
    La structure de ton code sur ce point devrait ressembler à quelque chose comme cela:

    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
     
    	void Start () 
    	{
             ...
    		LookAtCamera();
             ...
    	}
     
    	void OnLevelWasLoaded(int level) 
    	{
             ...
    		LookAtCamera();
             ...
    	}
     
    	void LookAtCamera()
    	{
    		Transform thecamera = Camera.main.transform;
    		Vector3 pos = new Vector3( thecamera.position.x, transform.position.y, thecamera.position.z);
    		transform.LookAt(pos);
    	}

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/10/2010, 18h37
  2. [AC-2007] Connaitre l'imprimante après son changement
    Par loufab dans le forum VBA Access
    Réponses: 4
    Dernier message: 13/07/2010, 12h17
  3. [Wamp] Apache plante après un changement de version PHP
    Par Nams29 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 12/05/2010, 11h22
  4. Réponses: 0
    Dernier message: 04/05/2010, 18h56
  5. Réponses: 3
    Dernier message: 25/06/2007, 15h25

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