2015-09-20 9 views
5

Próbuję dołączyć zdarzenie onValueChanged do mojego suwaka GUI, ale z jakiegoś powodu daje mi obowiązkową opcję wstawienia wartości (to czwarte pole w sekcja "O zmianie wartości (pojedynczej)". Wtedy wysyła tylko wspomnianą wartość, a nie rzeczywistą wartość suwaka.Unity3D Suwak onValueChanged wysyła tylko 0 (lub inną zdefiniowaną wartość)

enter image description here

Kod dla zdarzenia jest następujący:

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

Próbowałem ponownym zarówno jedności i Visual Studio 2013 bezskutecznie. Teraz kładzie pudełko z wartością na każde nowe wydarzenie, które próbuję utworzyć.

+0

Można to zrobić za pomocą UnityEvents, ale nie mogę znaleźć przykładu ... – Almo

Odpowiedz

12

Można to zrobić

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

Następnie przypisać suwak: enter image description here

W ten sposób można uzyskać wartość suwaka lub inne rzeczy suwak ma :-) nadzieję, że to, co chciałeś :-)

+0

Dzięki, to działa! :) Ale jak to możliwe, że działa dobrze z innymi suwakami, które mam na scenie? Wszystkie moje programy obsługi zdarzeń są takie same (na razie), ale to była jedyna, która pokazała czwarte pole. –

+3

Czy jesteś pewien, że wybrałeś właściwy poniżej Dynamic float http://imgur.com/5325W7m – Jesper

+0

Nie wiem, co powiedzieć. To był dokładny problem. Dziękuję bardzo, Jesper! –

1

Jeśli chcesz przekazać "zmienną dynamiczną" z systemu Unity (np. ScrollRect zmienna scrollPosition lub Slider wartość), po prostu utwórz metodę lub właściwość w skrypcie docelowym, która odpowiada typowi wartości.

Na przykład ScrollRect może wysłać Vector2 „dynamicznie” do skryptu docelowego, więc na skrypcie docelowego, chcesz napisać metodę, która wygląda tak:

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

lub właściwość, która wygląda jak to:

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

ten posiada kilka niejasnych ale ważne konsekwencje:

  1. Metoda i właściwość zapisana powyżej nie będą wyświetlane jako "dynamiczne" na innych listach zwrotnych zdarzeń komponentu UI, jeśli "zmienna dynamiczna" tego składnika interfejsu nie jest zgodna (w tym przypadku Vector2 dla ScrollRect).

  2. Podpis metody musi być TYLKO typem zmiennej dynamicznej. tj .: public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {} nie pojawi się jako "dynamiczny" na liście wywołań zwrotnych zdarzenia komponentu.

Mam nadzieję, że niczego nie zostawiam, to nie jest dobrze udokumentowane (lub łatwe do znalezienia). Mam nadzieję, że to pomoże.

0

Miałem dokładnie ten sam problem, stare suwaki były dobrze dopasowane, ale nowe suwaki pokazały symbol zastępczy, w którym umieszczasz wartość. Nawet poprzednie suwaki, jeśli dotknę ich i zmienię na dokładnie taką samą metodę, to teraz pokazują wartość zastępczą i zawsze wysyłają zero. Dodałem suwak zaledwie godzinę temu, ale teraz każda zmiana suwaka OnChanged pokaże wartość zastępczą. W tym czasie dodałem do klasy docelowej pole statyczne, nie wiem, czy to jest przyczyną.

+0

Upewnij się, że wybrałeś Dynamic float (http://imgur.com/5325W7m) –

18

to najlepsza odpowiedź znalazłem:

(opublikowany jako komentarz Jesper)

Upewnij się, że wybrany dynamiczny unosić się od OnValueChanged rozwijanej listy w Inspektorze

click here for the image

+0

To była odpowiedź, która pomogła mi. – Alpants

Powiązane problemy