web-dev-qa-db-ja.com

Unity3DスライダーonValueChangedは0(または他の定義された値)のみを送信します

OnValueChangedイベントをGUIスライダーにアタッチしようとしていますが、何らかの理由で値を入力するための必須オプションが表示されます([値の変更時(単一)]セクションの4番目のボックスです)。次に、スライダーの実際の値ではなく、前述の値のみを送信します。

enter image description here

イベントのコードは次のとおりです。

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

UnityとVisual Studio 2013の両方を再起動して無用に試しました。今では、私が作成しようとするすべての新しいイベントに値を持つボックスを配置しています。

13

あなたはこれを行うことができます

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

次にスライダーを割り当てます: enter image description here

そうすれば、スライダーの値、またはスライダーが持っているその他のものを取得できます:-)それがあなたが望んだものであることを願っています:-)

28
Jesper

これが私が見つけた最良の答えです:

(Jesperによるコメントとして投稿)

インスペクターのOnValueChangedドロップダウンリストから動的フロートを選択したことを確認してください

画像はここをクリック

30
dev_ter

UnityのUIシステムから「動的変数」(つまり、ScrollRectscrollPosition変数またはSliderの値)を渡したい場合は、ターゲットスクリプトにメソッドまたはプロパティを作成するだけです値タイプと一致します。

たとえば、ScrollRectは_Vector2_を「動的に」ターゲットスクリプトに送信できるため、ターゲットスクリプトで次のようなメソッドを記述します。

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

または、次のようなプロパティ:

_public Vector2 myDynamicVar {set; [optional get;]}
_

これにはいくつかの漠然とした重要な影響があります:

  1. 上記で記述されたメソッドとプロパティは、UIコンポーネントの「動的変数タイプ」が一致しない場合(この場合は_Vector2_ for ScrollRect)、他のUIコンポーネントのイベントコールバックリストでは「動的」として表示されません。 )。

  2. メソッドのシグネチャは、動的変数の型である必要があります。つまり、public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {}は、コンポーネントのイベントコールバックリストに「動的」として表示されません。

私は何も省かなかったといいのですが、これは十分に文書化されていません(または簡単に見つけることができません)。お役に立てば幸いです。

1
Aaron Hull

これとまったく同じ問題がありました。古いスライダーは適切にバインドされていましたが、新しいスライダーは値を入力するプレースホルダーを示していました。以前のスライダーでも、それに触れてまったく同じ方法に変更すると、値のプレースホルダーが表示され、常にゼロが送信されていました。ちょうど1時間前にスライダーを追加しましたが、スライダーのOnChangedを変更すると、プレースホルダーの値が表示されます。そのときに静的フィールドをターゲットクラスに追加しましたが、それが原因かどうかはわかりません。

0
Michael Urvan