[RÉSOLU] Erreurs de référence

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
BloodOfFairy
Messages : 3
Inscription : 21 Août 2019 16:46

[RÉSOLU] Erreurs de référence

Message par BloodOfFairy » 21 Août 2019 19:45

Je suis entrain de faire un TowerDefences en survivant le tuto de "Tuto Unty FR" :https://www.youtube.com/playlist?list=P ... h0_boV1nNL
Je suis a l'épisode 18 et j'ai un problème dans mon script en voulant mettre un System d’amélioration en place:
Voici le fichier BuildManager

Code : Tout sélectionner

using UnityEngine;

public class BuildManager : MonoBehaviour
{

    #region Singleton
    public static BuildManager instance;

    private void Awake()
    {
        if (instance != null)
        {
            Debug.LogError("il y a deja un BuildManager dans la scène !");
            return;
        }
        instance = this;
    }
    #endregion


    public GameObject standardTurretPrefab;
    public GameObject missileLauncherPrefab;
    public GameObject buildEffect;

    private TurretBP turretToBuild;
    private Node selectedNode;

    //true suis on peut construire sur l'emplacement
    public bool canBuild{get { return turretToBuild != null; }}
    public bool haveMoney { get { return PlayerStats.money >= turretToBuild.cost; } }

    public void buildTurretOn(Node node)
    {
        if (PlayerStats.money < turretToBuild.cost)
        {
            Debug.Log("Pas assez d'argent pour cette article");
            return;
        }
        PlayerStats.money -= turretToBuild.cost;
        
        GameObject turret = (GameObject)Instantiate(turretToBuild.prefab, node.getBuildPosition(), Quaternion.identity);
        node.turret = turret;

        GameObject effect = (GameObject)Instantiate(buildEffect, node.getBuildPosition(), Quaternion.identity);
        Destroy(effect, 1.5f);
        
        Debug.Log("L'objet a été acheté, il vous reste " + PlayerStats.money);
    }
    public void SelectTurretToBuild(TurretBP turret)
    {
        turretToBuild = turret;
        selectedNode = null;
    }
    public void SelectNode(Node node)
    {
        selectedNode = node;
        turretToBuild = null;
    }

}
Voici le fichier Node

Code : Tout sélectionner

using UnityEngine.EventSystems;
using UnityEngine;

public class Node : MonoBehaviour
{
    public GameObject turret;

    public Vector3 positionOffset;

    public Color hoverColor;
    private Color startColor;
    public Color CantBuildColor;

    private Renderer rend;

    private BuildManager buildManager;

    private void Start()
    {
        rend = GetComponent<Renderer>();
        startColor = rend.material.color;
        buildManager = BuildManager.instance;
    }
    
    public Vector3 getBuildPosition()
    {
        return transform.position + positionOffset;
    }

    private void OnMouseDown()
    {
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }

        if (turret != null)
        {
            BuildManager.SelectNode(this);
            return;
        }

        if (!buildManager.canBuild)
        {
            return;
        }

        buildManager.buildTurretOn(this);
        
    }

    private void OnMouseEnter()
    {
        if(!buildManager.canBuild|| EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }
        if (buildManager.haveMoney)
        {

            rend.material.color = hoverColor;
        }
        else
        {
            rend.material.color = CantBuildColor;
        }
    }

    private void OnMouseExit()
    {
        rend.material.color = startColor;
    }
}
L'erreurs est signaler a la ligne 39 de Node.cs
Je n'est pas suivit les 3 épisode sur l'ajout de la tourelle laser et je me demande si ce n'est pas dut a ça, mais je ne pense pas car mon code me parait quand même bon.
Merci de m'aider car je vous avoue que ça fait 2 jour que j'essaye de résoudre l’erreur en vains
Pièces jointes
Capture.PNG
L'erreur
Capture.PNG (14.2 Kio) Consulté 2047 fois
Dernière édition par BloodOfFairy le 22 Août 2019 10:41, édité 1 fois.

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

Re: [DB-AL] Erreurs Incomprise

Message par Max » 21 Août 2019 20:07

Bonsoir,

Ce n'est pas BuildManager mais buildManager. Attention aux différences entre majuscule/minuscule.
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

BloodOfFairy
Messages : 3
Inscription : 21 Août 2019 16:46

Re: [DB-AL] Erreurs Incomprise

Message par BloodOfFairy » 21 Août 2019 21:26

Merci infiniment mais du coup je n'est pas très bien compris pourquoi, pourrait me le récapituler stp car moi je croyait que c’était le BuildManager de

Code : Tout sélectionner

public class BuildManager : MonoBehaviour 
qui compter?

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

Re: [DB-AL] Erreurs Incomprise

Message par Max » 21 Août 2019 21:50

Tu as la classe BuildManager, définis dans le premier script.
En suite, dans le script Node.cs, il y a des appels au singleton BuildManager, et pour ce faire il se sert d'une référence à cette classe. D'ou le ligne:

Code : Tout sélectionner

 private BuildManager buildManager;
La référence est buildManager, référence à une classe BuildManager (et qui pointera vers le singleton: buildManager = BuildManager.instance)
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

BloodOfFairy
Messages : 3
Inscription : 21 Août 2019 16:46

Re: [DB-AL] Erreurs Incomprise

Message par BloodOfFairy » 21 Août 2019 21:53

Merci c'est super simpa :super:

Répondre

Revenir vers « (C#) CSharp »