web-dev-qa-db-fra.com

Unity3D Slider onValueChanged n'envoyant que 0 (ou toute autre valeur définie)

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.

enter image description here

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.

13
Filip Vondrášek

Tu peux le faire

public void ChangeWindDirection(Slider slider)
{
    Debug.Log("New wind direction: " + slider.value);
}

Attribuez ensuite le curseur: enter image description here

De cette façon, vous pouvez obtenir la valeur du curseur, ou d'autres choses que le curseur a :-) J'espère que c'est ce que vous vouliez :-)

28
Jesper

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

cliquez ici pour l'image

30
dev_ter

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:

  1. 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).

  2. 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.

1
Aaron Hull

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.

0
Michael Urvan