Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
C# - Unity - Problema con el paso de parámetros

Estoy tratando de extraer una gran cantidad de código en mi programa y encontré un problema.

Esta es mi función para extraer un proceso de fundición:

 public IEnumerator Smelting(Button button, Image bar, BigDouble material, BigDouble output) { button.interactable = false; float t = 0f; while (t <= 1f) { bar.fillAmount = t; t += Time.deltaTime / 4; yield return null; } bar.fillAmount = 0; //saveLoadHandler.data.copperBar += smeltingHandler.smeltCopperOreOutput; material += output; button.interactable = true; }

Mi problema ahora es que quiero agregar la salida al material con: material += output . El comando anterior muestra cómo se ven estos parámetros.

Entonces parece que en este caso el material no se asigna correctamente.

No quiero ir por el camino if(type = copper){copper += output } else if(type = iron)...

¿Hay una solución para eso?

¡Gracias por adelantado!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

si BigDouble es como un double normal, es un tipo de valor y, por lo tanto, se pasa por valor a su método. Puede agregar la palabra clave ref para pasarla por referencia:

 public IEnumerator Smelting(Button button, Image bar, ref BigDouble material, BigDouble output)

Sin embargo, los iteradores no pueden tener argumentos de referencia, por lo que otra solución podría ser pasar un delegado al método cuyo trabajo es incrementar algo.

 public IEnumerator Smelting(Button button, Image bar, Action<BigDouble> incrementMaterial, BigDouble output) { .... incrementMaterial(output); // instead of material += output .... }

y luego la persona que llama:

 StartCoroutine(smeltingCore.Smelting( smeltCopperOreButton, smeltCopperOreBar, amount => saveLoadHandler.data.copperBar += amount, smeltingHandler.smeltCopperOreOutput));

Por supuesto, en este punto solo está pasando output para usarla en el delegado para que pueda simplificar ambos:

 public IEnumerator Smelting(Button button, Image bar, Action incrementMaterial) { .... incrementMaterial(); .... }

y

 StartCoroutine(smeltingCore.Smelting( smeltCopperOreButton, smeltCopperOreBar, () => saveLoadHandler.data.copperBar += smeltingHandler.smeltCopperOreOutput ));
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda