Page 1 sur 1

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

Publié : 21 Août 2019 19:45
par BloodOfFairy
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

Re: [DB-AL] Erreurs Incomprise

Publié : 21 Août 2019 20:07
par Max
Bonsoir,

Ce n'est pas BuildManager mais buildManager. Attention aux différences entre majuscule/minuscule.

Re: [DB-AL] Erreurs Incomprise

Publié : 21 Août 2019 21:26
par BloodOfFairy
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?

Re: [DB-AL] Erreurs Incomprise

Publié : 21 Août 2019 21:50
par Max
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)

Re: [DB-AL] Erreurs Incomprise

Publié : 21 Août 2019 21:53
par BloodOfFairy
Merci c'est super simpa :super: