2015-09-20 9 views
5

Sto provando ad allegare un evento onValueChanged al mio cursore GUI, ma per qualche motivo mi dà un'opzione obbligatoria per inserire un valore (è la quarta casella in la sezione "On Value Change (Single)"). Quindi invia solo il valore indicato, non il valore effettivo del cursore.Unity3D Slider onValueChanged invia solo 0 (o altro valore definito)

enter image description here

Il codice per l'evento è la seguente:

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

ho provato a riavviare sia l'Unità e Visual Studio 2013 senza alcun risultato. Ora mette anche la scatola con un valore per ogni nuovo evento che cerco di creare.

+0

C'è un modo per farlo usando UnityEvents, ma non riesco a trovare un esempio ... – Almo

risposta

12

È possibile farlo

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

quindi assegnare il dispositivo di scorrimento: enter image description here

In questo modo è possibile ottenere il valore del cursore, o di altre cose il cursore ha :-) Spero che sia quello che volevi :-)

+0

Grazie, funziona! :) Ma come è possibile che funzioni bene con gli altri cursori che ho nella scena? Tutti i miei gestori di eventi sono gli stessi (per ora), ma questo è stato l'unico a mostrare la quarta casella. –

+3

Sei sicuro di aver selezionato quello giusto sotto Float dinamico http://imgur.com/5325W7m – Jesper

+0

Non so cosa dire. Questo era il problema esatto. Grazie mille, Jesper! –

1

Se si desidera passare una "variabile dinamica" dal sistema di interfaccia utente di Unity (ovverovariabile o Slider di valore), è sufficiente creare un metodo o una proprietà nello script di destinazione che corrisponda al tipo di valore.

Per esempio, ScrollRect può inviare un Vector2 "dinamicamente" a uno script obiettivo, quindi sullo script di destinazione, si vuole scrivere un metodo che assomiglia a questo:

public [any return type] MyMethod(Vector2 myDynamicVar) {} 

o una proprietà che sembra questo:

public Vector2 myDynamicVar {set; [optional get;]} 

questo ha un paio di vaghi ma importanti implicazioni:

  1. il metodo e la proprietà scritti sopra non appariranno come "dinamici" negli elenchi di callback di altri componenti del componente UI se il "tipo di variabile dinamico" del componente UI non corrisponde (in questo caso Vector2 per ScrollRect).

  2. La firma del metodo deve essere SOLO il tipo di variabile dinamica. vale a dire: public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {} non apparirà come "dinamico" nell'elenco di callback degli eventi del componente.

Spero di non aver lasciato nulla, questa roba non è ben documentata (o facile da trovare). Spero possa essere d'aiuto.

0

Avevo lo stesso identico problema, i vecchi cursori erano legati bene ma i nuovi cursori mostravano il segnaposto dove si inserisce un valore. Persino i cursori precedenti, se li tocco e lo cambio allo stesso identico metodo, ora mostravano il valore placeholder e inviano sempre zero. Avevo aggiunto un cursore solo un'ora fa, ma ora qualsiasi modifica al cursore OnChanged mostrerà il valore del segnaposto. Ho aggiunto un campo statico alla classe target in quel momento, non sono sicuro che sia la causa.

+0

Assicurati di aver selezionato Dynamic float (http://imgur.com/5325W7m) –

18

questa è la risposta migliore che ho trovato:

(postato come commento di Jesper)

Assicurati selezionato galleggiante dinamico dal OnValueChanged discesa della finestra di ispezione

click here for the image

+0

Questa è stata la risposta che mi ha aiutato. – Alpants

Problemi correlati