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

83
Vistas
Duplicando funciones

Cada vez que llamo a la función Instanciar, duplica cada función con ella y duplica cada número

 private Button[] Checks; public GameObject tni;//TextAndInput public int Coins; public TMPro.TextMeshProUGUI Score; private void Start() { Checks = GetComponentsInChildren<Button>(); foreach(Button button in Checks) { button.onClick.AddListener(Add); } } private void Update() { Score.SetText(Coins.ToString()); if (Input.GetKeyDown(KeyCode.Space)) { Duplicate(); } } public void Add() { Coins++; } public void Duplicate() { GameObject duplicate = GameObject.Instantiate(tni); duplicate.transform.position=new Vector3(tni.transform.position.x, tni.transform.position.y-100, tni.transform.position.z); duplicate.transform.SetParent(GameObject.FindGameObjectWithTag("Canvas").transform, false); Button ButtonDuplicate = GetComponentInChildren<Button>(); ButtonDuplicate.onClick.AddListener( () => Add() ); }

** Por ejemplo, la función de agregar suma 2 en el primer botón y 1 en el botón duplicado. y cuando duplique los botones duplicará primero el botón 1 luego cuando duplique de nuevo duplicará otros 2 entonces ahora son 4 botones y si los duplico de nuevo serán 8 y así sucesivamente si saben cómo solucionarlo Por favor dígame **

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

0

La línea problemática parece ser

 Button ButtonDuplicate = GetComponentInChildren<Button>();

siempre haces esto en el mismo objeto (aquel al que está adjunto este script), así que

 ButtonDuplicate.onClick.AddListener( () => Add() );

siempre agrega una devolución de llamada adicional a Add para el primer botón que se encuentra entre los elementos secundarios de este objeto.


Me parece que más bien querías hacer

 Button ButtonDuplicate = duplicate.GetComponentInChildren<Button>();

para obtener el componente del botón que acaba de generar.


Actualizar

A tu comentario sobre el puesto

En

 duplicate.transform.position=new Vector3(tni.transform.position.x, tni.transform.position.y-100, tni.transform.position.z);

siempre toma la misma posición tni que nunca cambia y desde allí va -100 en Y .

En su lugar, almacene la última posición generada, por ejemplo, como

 private Vector3 currentSpawnPos; private void Start () { ... currentSpawnPos = tni.transform.position - Vector3.up * 100; } public void Duplicate() { ... duplicate.transform.position=new Vector3(currentSpawnPos); currentSpawnPos -= Vector3.up * 100; ... }

O, en realidad, en lugar de calcular eso por su cuenta, podría usar un VerticalLayoutGroup y simplemente agregar sus botones y se colocarán automáticamente uno debajo del otro

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