J'essaie d'attacher un événement onValueChanged à mon curseur GUI, mais pour une raison quelconque, cela me donne une option obligatoire pour mettre une valeur (c'est la quatrième case dans la section "On Value Change (Single)"). Ensuite, il envoie uniquement la valeur susmentionnée, pas la valeur réelle du curseur.
Le code de l'événement est le suivant:
public void ChangeWindDirection(float value)
{
Debug.Log("New wind direction: " + value);
}
J'ai essayé de redémarrer Unity et Visual Studio 2013 en vain. Maintenant, il met même la boîte avec une valeur à chaque nouvel événement que j'essaie de créer.
c'est la meilleure réponse que j'ai trouvée:
(posté comme commentaire par Jesper)
Assurez-vous d'avoir sélectionné Flottant dynamique dans la liste déroulante OnValueChanged de l'inspecteur
Si vous voulez passer une "variable dynamique" du système d'interface utilisateur d'Unity (c'est-à-dire la variable ScrollRect
de scrollPosition
ou la valeur de Slider
), créez simplement une méthode ou une propriété dans le script cible qui correspond au type de valeur.
Par exemple, ScrollRect
peut envoyer un Vector2
"Dynamiquement" à un script cible, donc sur le script cible, vous voulez écrire une méthode qui ressemble à ceci:
public [any return type] MyMethod(Vector2 myDynamicVar) {}
Ou une propriété qui ressemble à ceci:
public Vector2 myDynamicVar {set; [optional get;]}
Cela a quelques implications vagues mais importantes:
la méthode et la propriété écrites ci-dessus n'apparaîtront pas comme "dynamiques" dans les listes de rappel d'événements d'autres composants d'interface utilisateur si le "type de variable dynamique" de ce composant d'interface utilisateur ne correspond pas (dans ce cas Vector2
pour ScrollRect
).
La signature de la méthode doit être JUSTE le type de variable dynamique. c'est-à-dire: public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {}
n'apparaîtra pas comme "dynamique" dans la liste de rappel d'événement du composant.
J'espère que je n'ai rien oublié, ce truc n'est pas bien documenté (ou facile à trouver). J'espère que ça aide.
J'ai eu exactement le même problème, les anciens curseurs étaient très bien liés, mais les nouveaux curseurs montraient l'espace réservé où vous mettez une valeur. Même les curseurs précédents, si je les touche et les change pour la même méthode exacte, ils montraient maintenant l'espace réservé de valeur et envoyaient toujours zéro. J'avais ajouté un curseur il y a juste une heure, mais maintenant, toute modification du curseur OnChanged affichera la valeur de l'espace réservé. J'ai ajouté un champ statique à la classe cible à ce moment-là, je ne sais pas si c'est la cause.