using UnityEngine; public class recursos : MonoBe...
Creado el: 22 de febrero de 2025
Creado el: 22 de febrero de 2025
using UnityEngine;
public class recursos : MonoBehaviour
{
// materias primas
public int mP1 = 0;
public int mP2 = 0;
public int mP3 = 0;
public int mP4 = 0;
public int mP5 = 0;
public int mP6 = 0;
public int mP7 = 0;
public int mP8 = 0;
public int mP9 = 0;
textpublic int capacidadMP1 = 0; public int capacidadMP2 = 0; public int capacidadMP3 = 0; // bienes manufacturados public int bM1 = 0; public int bM2 = 0; public int bM3 = 0; public int bM4 = 0; public int bM5 = 0; public int bM6 = 0; // puntuación total del jugador public float dinero = 0f; public float conocimiento = 0f; public float fuerzaMilitar = 0f; // incremento de materias primas public void aumentarMP1(int cantidad) { mP1 = Mathf.Min(mP1 + cantidad, capacidadMP1); Debug.Log("Granos totales = " + mP1 + " / " + capacidadMP1); } public void aumentarMP2(int cantidad) { mP2 = Mathf.Min(mP2 + cantidad, capacidadMP2); Debug.Log("Hortalizas totales = " + mP2 + " / " + capacidadMP2); } public void aumentarMP3(int cantidad) { mP3 = Mathf.Min(mP3 + cantidad, capacidadMP3); Debug.Log("Frutas totales = " + mP3 + " / " + capacidadMP3); }
using UnityEngine;
public class activarEdificios : MonoBehaviour
{
public GameObject edificio1;
public GameObject edificio2;
public GameObject edificio3;
textpublic edificios contadorEdificios; public edData datosEdificios; public void InstantiateOnClick1() { Instantiate(edificio1, Vector3.zero, Quaternion.identity); contadorEdificios.añadirEdificio1(1); datosEdificios.AñadirPanel1(); } public void InstantiateOnClick2() { Instantiate(edificio2, Vector3.zero, Quaternion.identity); contadorEdificios.añadirEdificio2(1); datosEdificios.AñadirPanel2(); } public void InstantiateOnClick3() { Instantiate(edificio3, Vector3.zero, Quaternion.identity); contadorEdificios.añadirEdificio3(1); datosEdificios.AñadirPanel3(); }
}
Below is an example of how you might connect your “recursos” script (which stores and manages the player’s resources) with your “activarEdificios” script (which spawns buildings). The goal is typically to check if the player has enough resources before instantiating a building, subtract those costs, and only then create the building if affordable.
recursos.cs
You already have a script that manages resources (recursos
). One typical addition is to provide a helper function to spend or subtract resources. For example:
csharppublic bool GastarRecursos(int granos, int hortalizas, int frutas) { // Comprueba si hay suficientes recursos if (mP1 >= granos && mP2 >= hortalizas && mP3 >= frutas) { // Si sí hay, descuéntalos mP1 -= granos; mP2 -= hortalizas; mP3 -= frutas; // Devuelve true indicando que sí se pudieron gastar return true; } else { // No había suficientes recursos, no se gasta nada return false; } }
Con esta función, cada vez que quieras “pagar” el costo de un edificio u otra acción, puedes llamar a GastarRecursos(...)
. Si devuelve true
, has gastado exitosamente; si devuelve false
, faltan recursos.
Nota: La misma lógica se puede repetir para cualquier otra combinación de recursos que tus edificios requieran.
activarEdificios.cs
Tu código actual instancia edificios sin verificar recursos. Lo ideal es hacer algo parecido a esto:
Instantiate
, consultar a la clase recursos
si hay suficientes recursos y, si sí, gastarlos y crear el edificio.Por ejemplo, supongamos que:
activarEdificios.cs
csharpusing UnityEngine; public class activarEdificios : MonoBehaviour { // Prefabs de Edificios public GameObject edificio1; public GameObject edificio2; public GameObject edificio3; // Scripts auxiliares public edificios contadorEdificios; public edData datosEdificios; // *** Referencia al script que maneja los recursos *** public recursos recScript; // Arrástralo en el inspector para vincular // Costos del edificio 1 public int costo1Granos = 5; public int costo1Hortalizas = 2; public int costo1Frutas = 0; // Costos del edificio 2 public int costo2Granos = 3; public int costo2Hortalizas = 4; public int costo2Frutas = 2; // Costos del edificio 3 public int costo3Granos = 10; public int costo3Hortalizas = 0; public int costo3Frutas = 5; public void InstantiateOnClick1() { // Pide permiso al script de recursos para gastar bool tieneRecursos = recScript.GastarRecursos(costo1Granos, costo1Hortalizas, costo1Frutas); if (tieneRecursos) { // Solo se instancia si fue posible pagar el costo Instantiate(edificio1, Vector3.zero, Quaternion.identity); contadorEdificios.añadirEdificio1(1); datosEdificios.AñadirPanel1(); } else { Debug.LogWarning("No tienes suficientes recursos para construir el Edificio 1"); } } public void InstantiateOnClick2() { bool tieneRecursos = recScript.GastarRecursos(costo2Granos, costo2Hortalizas, costo2Frutas); if (tieneRecursos) { Instantiate(edificio2, Vector3.zero, Quaternion.identity); contadorEdificios.añadirEdificio2(1); datosEdificios.AñadirPanel2(); } else { Debug.LogWarning("No tienes suficientes recursos para construir el Edificio 2"); } } public void InstantiateOnClick3() { bool tieneRecursos = recScript.GastarRecursos(costo3Granos, costo3Hortalizas, costo3Frutas); if (tieneRecursos) { Instantiate(edificio3, Vector3.zero, Quaternion.identity); contadorEdificios.añadirEdificio3(1); datosEdificios.AñadirPanel3(); } else { Debug.LogWarning("No tienes suficientes recursos para construir el Edificio 3"); } } }
activarEdificios
.recScript
(tipo recursos
). Arrastra allí el objeto (GameObject) que tiene tu componente recursos.cs
.GastarRecursos
para incluirlos, o crear otro método que verifique y descuente múltiples tipos de “moneda”.recursos
, como AnadirRecursos(int granos, int hortalizas, int frutas)
.capacidadMP1, capacidadMP2, etc.
), podrías hacer un chequeo adicional antes de construir.recursos.cs
que verifique si hay recursos suficientes y, de ser así, los descuente.InstantiateOnClickX
, llama a ese método antes de instanciar el prefab.De esta manera, conectas tu sistema de recursos con el sistema de creación de edificios, impidiendo al jugador construir cuando no se cumplan los requisitos.