Jump to content
UnitySpain
Sign in to follow this  
Stradmann

algo extraño pasa con addlistener

Recommended Posts

Hola! Tengo un trozo de script que parece funcionar bien, pero cuando lo miro mas de cerca hay algo raro. Me explico:

... 
for (int i = 0; i < charactersToSelect.Length; i++)
        {
            charactersToSelect[i].onValueChanged.AddListener(delegate { CharacterSelectionToggleReaction(thisMision.maxCharactersAvailable, i); });
        }
}
 public void CharacterSelectionToggleReaction (int maxChar, int index)
    {
        Debug.Log("running function" + index);
        int characterCount = 0;
        for (int i = 0; i < charactersToSelect.Length; i++)
        {
            if (charactersToSelect[i].isOn)
            {
                characterCount++;
            }
        }
        if (characterCount == maxChar)
        {
            for (int i = 0; i < charactersToSelect.Length; i++)
            {
                if (!charactersToSelect[i].isOn)
                {
                    charactersToSelect[i].enabled = false;
                }
            }
        }
        else
        {
            for (int i = 0; i < charactersToSelect.Length; i++)
            {
                charactersToSelect[i].enabled = true;
            }
        }
    }

El comportamiento final es el esperado, pero, en el for del principio, la "i" que paso como parametro en  el AddListener simpre me da un valor de 6, es decir que me envia el charactersToSelect.Length. Ese es el primer fallo. Luego cuando hago clic en el boton me aparecen 200 o 2000 mensajes de "running function", con un solo clic... solo deberia aparecer 1 mensaje por clic. Me parece bastante extraño asi que por eso lo cuelgo aquí a ver si veo el porqué y como resolverlo..

Gracias!!

Share this post


Link to post
Share on other sites

Ya esta resuelto!! 

lo primero lo solucione añadiendo int j = i; en  el primer for, i pasarle la j en vez de la i. Ha funcionado.

el segundo, es que la funcion que llama a esta que esta puesta aqui esta en el Update y no cerraba del todo bien la puerta, asi que añadí un bool que se pusiera false al final del if i asi no entrara mas.

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...