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 :

Erreur : choisir un personnage et l'afficher dans une autre 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 Erreur : choisir un personnage et l'afficher dans une autre scène
    Bonsoir

    Voilà ce sue j'ai pour mon jeu sous Unity,j'ai un menu dans lequel je peut choisir un personnage ensuite passer à une autre scène où je trouverai le personnage que j'ai choisit précédemment. Pour le moment j'ai réussit à choisir le personnage, récupérer son nom et l'afficher mais j'ai pas réussit a afficher le personnage dans la deuxième scène, à sa place j'ai une erreur disant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    InvalidOperationException: Operation is not valid due to the current state of the object
    System.Linq.Enumerable.Single[Transform] (IEnumerable`1 source, System.Func`2 predicate, Fallback fallback)
    System.Linq.Enumerable.Single[Transform] (IEnumerable`1 source, System.Func`2 predicate)

    j'utilise ce bout de code pour le propos

    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
    using UnityEngine;
    using System.Collections;
    using System.Linq;
     
    public class PlayerControl : MonoBehaviour {
     
    #region attributes
     
    	public Transform[] PlayerList;
    	public Transform CurrentPlayer;
     
     
    #endregion attributes
     
     
     
    #region methodes
    	// Use this for initialization
    	void Start () {
     
    		if (global.CurrentPlayer != null) {
     
    			Debug.Log(global.CurrentPlayer);
     
    			// tester si le player choisit existe dans la liste des players
    			CurrentPlayer = PlayerList.Single (d => d.name == global.CurrentPlayer);
     
     
     
    			//si le player choisit n'existe pas alors retourner vers la scène précedente
    			if (CurrentPlayer == null)
    				Application.LoadLevel ("ChoosePlayer");
     
    			InstantiatePlayer ();
    		} 
    			else {
    			Application.LoadLevel("ChoosePlayer");
     
    		}
     
    	}
     
    	//InstantiatePlayer Start
     
    	void InstantiatePlayer(){
     
    		if (CurrentPlayer != null) {
     
    			CurrentPlayer = Instantiate(CurrentPlayer, transform.position,CurrentPlayer.rotation) as Transform;
    			CurrentPlayer.parent = transform;
     
    		}
     
     
    	}
     
    	//InstantiatePlayer End
     
     
    #endregion methodes
    }

  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,

    Ton soucis vient très certainement de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentPlayer = PlayerList.Single (d => d.name == global.CurrentPlayer);
    Conclusion, soit le transform correspondant au nom 'global.CurrentPlayer' n'est pas contenu dans ta PlayerList, ou alors il n'y pas qu'un seul éléments trouvé.
    Attention, c'est bien de prendre les code d'un tuto (dans ton cas ceux de MADEiN83), les comprendre c'est mieux hein, surtout que la tu abordes des concepts de code déjà un peu plus pointu.

    PS: et accessoirement, tu ouvres pas mal de sujets, mais tu n'en clôture aucun. Quid du DontDestroyOnLoad, Quid de l'orientation de ton personnage, etc...

  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
    t'as rasion j'ai pris le code d'un tuto, j'assume mais je les comprend bien. je me trouve un peut perdu quand que j'ai réussit a récupérer le nom du player avec l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Log(global.CurrentPlayer);
    qui m'affiche le nom de player que j'ai choisit dans la scène précédente et j'arrive pas a récupérer le player lui même.

  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
    Citation Envoyé par chemsoun Voir le message
    et j'arrive pas a récupérer le player lui même.
    j'comprends pas ta question
    Ton script PlayerControl étant attaché à ton player si j'ai bien compris, ben tu as accès au membres et components habituels (gameObjet, transform, etc..)

  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
    Citation Envoyé par Greg Latiner Voir le message
    j'comprends pas ta question
    Ton script PlayerControl étant attaché à ton player si j'ai bien compris, ben tu as accès au membres et components habituels (gameObjet, transform, etc..)
    je vais simplifier, dans la deuxième scène j'ai créer un Empty GameObject et je lui associé le script PlayerControl. Normalement le CurrentPlayer doit prendre quel que soit le Transform existant dans PlayerList et ayant le même nom que global.CurrentPlayer qui signifie le nom du player choisit dans la première scène

    j'éspere que c'est plus claire comme ça

  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
    Tu as ton Player sur lequel tu as ton script PlayerControl.
    Les éléments crée suite au menu sont en enfant du Player dans ta scene, la hiérarchie étant bien établie, tu peux passer par un truc du genre 'transform.GetChild()' ou 'transform.Find()'.

  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
    si j'ai bien compris tu veut dire que lorsque je passe à la deuxième scène je trouverai un enfant sous mon player ?

  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
    A la vue du code, oui.

  9. #9
    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
    non j'y trouve pas d'enfant sous le player.

    y'a pas d'autres solutions ?, selon une recherche que j'ai fait j'ai trouver qu'on peut utiliser GameObject.CreatePrimitive ou Instantiate

  10. #10
    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
    Si tu as suivit la même procédure que le tuto que tu as suivit, alors lors de l’exécution, tu dois avoir des enfants au player.

  11. #11
    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
    vous avez raison il faut que je trouve des enfants, j'ai réessayer et le résultat est le même pas d'enfants et pas du player dans la deuxième scène et l'erreur persiste

  12. #12
    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,

    Tu semble pourtant avoir suivit le tuto de MADEiN83 sans soucis de ce que tu en disais. Il fournis le code en plus je crois.
    Donc, en reprenant du début, tu devrais pouvoir arriver à mettre le doigt sur ce qui cloche.
    Pour l'erreur, je redis ce que j'ai dit plus haut, ton 'global.CurrentPlayer' n'est pas contenu dans ta PlayerList, ou alors il n'y pas qu'un seul éléments trouvé.

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/05/2008, 02h12
  2. Réponses: 9
    Dernier message: 30/03/2008, 20h30
  3. afficher dans une autre frame
    Par lrgtk dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 18/02/2008, 09h38
  4. Choix multiple à afficher dans une autre fenêtre
    Par makohsarah dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2007, 11h37
  5. Réponses: 2
    Dernier message: 31/05/2007, 11h01

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