[DB-AL] Problème pour que mon perso récolte du bois

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

[DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 09 Juil 2019 14:53

Salut, j'ai un problème.

Je n'arrive pas a désactiver mon GameObject arbre depuis mon script et je narrive pas a faire un cowntdown,
Quelqu'un pourrait m'aider ?

Voici mon script :

Code : Tout sélectionner

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollectWood : MonoBehaviour {

    public int WoodCollect = 2;
    public int NumberCut = 3;
    public GameObject Tree;

    public void OnMouseDown()
    {
        if(NumberCut != 0)
        {
            Ressources.wood =+ WoodCollect;
            NumberCut -= 1;
            WoodCollect += 1;
        }
        
        if(NumberCut < 1)
        {
            Tree.SetActive(false);
        }
    }
}
Et le "Ressources.wood =+ WoodCollect;" ne marche pas non plus.
Il vient d'un autre script, que voici :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ressources : MonoBehaviour {

    public static int wood = 10000;
    public static int rock = 10000;
}
Je suis un grand débutant, et j'aime me lancer des projets compliqués.

Merci de m'aider !

En fait, je suis en version 2017.5
Dernière édition par Platypuss le 09 Juil 2019 18:23, édité 1 fois.

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

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Max » 09 Juil 2019 18:42

Salut,

Vu le genre d'approche que tu sembles avoir choisi, au minimum ta classe Ressources ne doit pas dériver de MonoBehaviour. En suite tu dis:
Platypuss a écrit :
09 Juil 2019 14:53
Et le "Ressources.wood =+ WoodCollect;" ne marche pas non plus.
Ok, mais c'est vague "ne marche pas"... techniquement parlant.
Sans présumer du résultat, mais ne serait-ce pas plutôt
Ressources.wood += WoodCollect; au lieu de Ressources.wood =+ WoodCollect; ?
Platypuss a écrit :
09 Juil 2019 14:53
Je suis un grand débutant, et j'aime me lancer des projets compliqués.
Ben pourtant c'est pas compatible... :mrgreen:
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

Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 09 Juil 2019 21:09

Merci, mais ça marche toujours pas.

Je pense etre vraiment nul :gene: :gene:

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Moi 1971 » 09 Juil 2019 22:13

Bonsoir,
il faut comprendre ce que veut dire "Ressources.wood += WoodCollect" et comment ça se met en place en C#.
Dans le fichier/classe "CollectWood", la valeur qui se trouve dans "WoodCollect" doit s'ajouter à la valeur qui se trouve dans "wood". Mais "wood" se trouve dans le fichier/classe "Ressources". Et ton problème c'est que le fichier/classe "CollectWood" ne connaît pas le fichier/classe "Ressources". Il te faut donc définir/déclarer "Ressources" dans le start() de "CollectWood" pour pouvoir par la suite accéder à tous ses éléments, par exemple "Ressources.wood" ou "Ressources.rock".
C'est un problème d’accès de données depuis un autre fichier/classe/script. Sujet mainte fois traité ici. Donc, en faisant une petite recherche rapide tu trouveras plein d'exemple.
Bon code.

Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 10 Juil 2019 14:21

Merci beaucoup, cela ma vraiment bien aidé.

Mais maintenant, je n'arrive plus à comparer des variables, cela est vraiment énervant et je n'ai rien trouver sur cela :rougefaché:

J'ai le script Ressources qui marche bien:

Code : Tout sélectionner


using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ressources : MonoBehaviour
{
    public int wood;
    public int rock;

    public int Valuewood()
    {
        return wood;
    }

    public int Valuerock()
    {
        return rock;
    }

    public static implicit operator Ressources(int v)
    {
        throw new NotImplementedException();
    }
}
Le script collectWood qui marche bien:

Code : Tout sélectionner

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollectWood : MonoBehaviour {

    public int WoodCollect = 2;
    public int NumberCut = 3;
    public GameObject Tree;
    public Ressources wood;

    void Start()
    {
        wood = GetComponent<Ressources>();
    }

    public void OnMouseDown()
    {
        if(NumberCut != 0)
        {
            wood =+ WoodCollect;
            NumberCut =- 1;
            WoodCollect += 1;
        }
        
        if(NumberCut < 1)
        {
            Tree.SetActive(false);
        }
    }
}
et le code pour améliorer mon batiment qui ne marche pas:

Code : Tout sélectionner

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UpgardeCastle : MonoBehaviour
{
    public GameObject EventSys;

    public Ressources wood_Castle;
    public Ressources rock_Castle;

    public int woodNeed = 100;
    public int rockNeed = 100;

    public GameObject cl1;
    public GameObject cl2;
    
    public int Level_Castle = 1;

    void Start()
    {
        wood_Castle = GetComponent<Ressources>();
        rock_Castle = GetComponent<Ressources>();
    }

    public void Up1()
    {
        if (wood_Castle >= woodNeed && rock_Castle >= rockNeed && Level_Castle == 1)
        {

            wood_Castle =- woodNeed;
            rock_Castle =- rockNeed;

            woodNeed = woodNeed + 100;
            rockNeed = rockNeed + 100;

            Level_Castle = Level_Castle + 1;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);
            
        }
    }   
}

Le "if()" ne marche pas, et comme je l'ai dit, je ne lâche pas.
Vous avez une solution ????

Je vous remercie beaucoup pour votre aide.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Moi 1971 » 10 Juil 2019 16:23

... Franchement ... J'ai juste une question... Pourquoi?
:shock:

Ton code ne doit pas donner les résultats que tu espères... Ou alors tu espères des choses bizarres..
1: Il t'a été dit que ta classe "Ressources" n'a pas besoin d'hériter de la classe "MonoBehaviour". En suite tu pourras faire le ménage dans les "using" au début du fichier qui ne seront inutiles, mais ça c'est à la fin quand tout fonctionne...
2: Tu mélanges encore les += et =+ et les -= et =- A part si tu veux "épater la galerie" je te conseillerais pour l'instant d'écrire la version longue du genre "A = A + 1" et non pas "A += 1"
3:

Code : Tout sélectionner

public static implicit operator Ressources(int v)
    {
        throw new NotImplementedException();
    }
Pourquoi? Que cherches tu à faire? Pourquoi utiliser une conversion de type implicite? Ton code utilise que du "int"?
Si tu veux accéder à tes variables depuis un autre fichier dans les règles de l'art, tu peux faire des recherches sur des "Getter" et "setter" en franglais... En gros, une fonction "get" pour lire une donné depuis l’extérieur. La donnée est "private" et la fonction elle est "public". Idem pour la fonction "set" publique pour modifier une donnée privée.
4 : Tu devrais utiliser les Debug.log en cascade pour afficher les valeurs de tes variables au cours du temps et du déroulement de ton code. Pour debeuguer il ne faut pas hésiter à les utiliser beaucoup. du genre :

Code : Tout sélectionner

public void OnMouseDown()
    {
        Debug.Log("Dans la fonction OnMouseDown. NumberCut = "+NumberCut );
        if(NumberCut != 0)
        {
            Debug.Log("Dans le if(). wood = "+wood );
            Debug.Log("Dans le if(). WoodCollect = "+WoodCollect );
            Debug.Log("Dans le if(). NumberCut = "+NumberCut );
            wood = wood + WoodCollect;
            NumberCut = NumberCu t - 1;
            WoodCollect = WoodCollect +1;
        }
        Debug.Log("Apres le if(). wood = "+wood );
        Debug.Log("Apres le if(). WoodCollect = "+WoodCollect );
         Debug.Log("Apres le if(). NumberCut = "+NumberCut );
        
Bon courage ;-)

Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 10 Juil 2019 18:53

Est ce que vous avez quelque chose pour apprendre le c# ?

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Alesk » 10 Juil 2019 19:39

Tu peux regarder par là : https://dotnet.developpez.com/csharp/

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

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Max » 10 Juil 2019 20:27

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

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Moi 1971 » 10 Juil 2019 20:36

Il y a plein de façon d'apprendre. La meilleur c'est celle qui te convient.
En plus du lien donné par Alesk, tu as Youtube si tu aime les vidéos.
Moi, perso j'aime bien le gars ici (c'est vieux 3/4 ans mais les principes restent bons)
https://www.youtube.com/channel/UCUgcAR ... uUQ/videos

Pour TOUT apprendre :
https://www.youtube.com/user/ToutApprendre/videos

Il y a aussi :
https://www.youtube.com/channel/UCJRwb5 ... 6Fw/videos

En anglais :
https://www.youtube.com/user/BurgZergArcade/videos
https://www.youtube.com/user/xOctoManx/videos

Et en y a encore pour plusieurs vies de visionnage ...

Mais le mieux c'est de rester motivé tel que tu l'es :super:

Répondre

Revenir vers « (C#) CSharp »