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

C# Discussion :

Utiliser les données d'un script à une autre [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Par défaut Utiliser les données d'un script à une autre
    Bonjour, je croie être dans la bonne section car j'utilise Unity mais je programme en C#.

    J'ai un problème que je n'arrive pas à résoudre. Je crée un jeu auquel chaque fois que le personnage tue un mob il gagne 100 points. Mais lorsqu'il meurt il reprend à 0

    Se que je voudrai faire est que lorsque le personnage dépasse les 10 000 points puis lorsqu'il sera mort, il passe au niveau suivant. Mais si il meurt sans avoir dépasser les 10 000 points il recommence le même niveau.
    Voila se que j'ai déjà mis dans Remover.cs

    Remover.cs
    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
    using UnityEngine;
    using System.Collections;
     
    public class Remover : MonoBehaviour
    {
        public GameObject splash;
        private Score score;            // Reference to the Score script.
     
     
        void OnTriggerEnter2D(Collider2D col)
        {
            // If the player hits
            if(col.gameObject.tag == "Player")
            {
                // stop the camera tracking the player
                GameObject.FindGameObjectWithTag("MainCamera").GetComponent<CameraFollow>().enabled = false;
     
                if(GameObject.FindGameObjectWithTag("HealthBar").activeSelf)
                {
                    GameObject.FindGameObjectWithTag("HealthBar").SetActive(false);
                }
     
                Instantiate(splash, col.transform.position, transform.rotation);
                Destroy (col.gameObject);
                // Setting up the reference.
                score = GetComponent<Score>();
                // If score >= 10000 ...
                if (score >= 10000)
                {
                //... Go to next level.
                if( Application.loadedLevel + 1 < Application.levelCount )
                    Application.LoadLevel( Application.loadedLevel + 1 );
                }
                //... Restart Game.
                else
                {
                    StartCoroutine("ReloadGame");
                }
            }
            else
            {
                // ... instantiate the splash where the enemy falls in.
                Instantiate(splash, col.transform.position, transform.rotation);
     
                // Destroy the enemy.
                Destroy (col.gameObject);  
            }
        }
     
        IEnumerator ReloadGame()
        {          
            // ... pause briefly
            yield return new WaitForSeconds(2);
            // ... and then reload the level.
            Application.LoadLevel(Application.loadedLevel);
        }
    }
    Et Score.cs

    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
    using UnityEngine;
    using System.Collections;
     
    public class Score : MonoBehaviour
    {
        public int score = 0;                   // The player's score.
     
     
        private PlayerControl playerControl;    // Reference to the player control script.
        private int previousScore = 0;          // The score in the previous frame.
     
     
        void Awake ()
        {
            // Setting up the reference.
            playerControl = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControl>();
        }
     
     
        void Update ()
        {
            // Set the score text.
            guiText.text = "Score: " + score;
     
            // If the score has changed...
            if(previousScore != score)
     
                playerControl.StartCoroutine(playerControl.Taunt());
     
     
            previousScore = score;
        }
     
    }
    Lorsque je fait ça j’obtiens une erreur dans Unity :

    Assets/Scripts/Remover.cs(30,29): error CS0019: Operator `>=' cannot be applied to operands of type `Score' and `int'

    Je ne suis pas très fort en C#.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu essaies de comparer un objet de type Score avec un objet de type Int32, ce qui n'est par défaut pas possible : que faut-il comparer ? Essaie plutôt avec ceci à la ligne 28 du code de Remover.cs que tu as posté ci-dessus :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    if (score.score >= 10000)
    Puisque dans la classe Score, tu exposes le membre score, la comparaison se fera bien entre deux objets de type Int32. Il vaudrait d'ailleurs mieux exposer une propriété plutôt qu'un membre...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Par défaut
    Merci de ton aide, ça m'est passé par la tête. Je n'y ai pas du tout pensé à score.score.
    Mais maintenant j'ai un autre problème. Cette fois-ci en écrivant le code, lorsque je meurs, la scène ne redémarre pas. Que j'ai 10 000 de score ou pas ça ne change rien. Lorsque je meurs le personnage reste mort jusqu'à ce que je redémarre le jeu.

    Voici l'erreur qu'Unity me donne :

    NullReferenceException: Object reference not set to an instance of an object
    Remover.OnTriggerEnter2D (UnityEngine.Collider2D col) (at Assets/Scripts/Remover.cs:28)

    Edit :

    C'est bon problème résolus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser les données d'une table comme champs d'une autre table
    Par Jalabert dans le forum Modélisation
    Réponses: 6
    Dernier message: 03/06/2010, 08h51
  2. Réponses: 0
    Dernier message: 01/04/2009, 10h12
  3. Réponses: 2
    Dernier message: 09/03/2009, 14h28
  4. Comment lire/utiliser les données d'une ADOTable ?
    Par melles dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2007, 04h43
  5. Utilisation de données en provenance d'une autre application
    Par alain35 dans le forum Général VBA
    Réponses: 6
    Dernier message: 29/01/2007, 10h23

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