Page 1 sur 3

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

Publié : 09 Juil 2019 14:53
par Platypuss
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

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

Publié : 09 Juil 2019 18:42
par Max
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:

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

Publié : 09 Juil 2019 21:09
par Platypuss
Merci, mais ça marche toujours pas.

Je pense etre vraiment nul :gene: :gene:

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

Publié : 09 Juil 2019 22:13
par Moi 1971
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.

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

Publié : 10 Juil 2019 14:21
par Platypuss
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.

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

Publié : 10 Juil 2019 16:23
par Moi 1971
... 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 ;-)

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

Publié : 10 Juil 2019 18:53
par Platypuss
Est ce que vous avez quelque chose pour apprendre le c# ?

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

Publié : 10 Juil 2019 19:39
par Alesk
Tu peux regarder par là : https://dotnet.developpez.com/csharp/

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

Publié : 10 Juil 2019 20:27
par Max

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

Publié : 10 Juil 2019 20:36
par Moi 1971
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: