OnValueChangedイベントをGUIスライダーにアタッチしようとしていますが、何らかの理由で値を入力するための必須オプションが表示されます([値の変更時(単一)]セクションの4番目のボックスです)。次に、スライダーの実際の値ではなく、前述の値のみを送信します。
イベントのコードは次のとおりです。
public void ChangeWindDirection(float value)
{
Debug.Log("New wind direction: " + value);
}
UnityとVisual Studio 2013の両方を再起動して無用に試しました。今では、私が作成しようとするすべての新しいイベントに値を持つボックスを配置しています。
これが私が見つけた最良の答えです:
(Jesperによるコメントとして投稿)
インスペクターのOnValueChangedドロップダウンリストから動的フロートを選択したことを確認してください
UnityのUIシステムから「動的変数」(つまり、ScrollRect
のscrollPosition
変数またはSlider
の値)を渡したい場合は、ターゲットスクリプトにメソッドまたはプロパティを作成するだけです値タイプと一致します。
たとえば、ScrollRect
は_Vector2
_を「動的に」ターゲットスクリプトに送信できるため、ターゲットスクリプトで次のようなメソッドを記述します。
_public [any return type] MyMethod(Vector2 myDynamicVar) {}
_
または、次のようなプロパティ:
_public Vector2 myDynamicVar {set; [optional get;]}
_
これにはいくつかの漠然とした重要な影響があります:
上記で記述されたメソッドとプロパティは、UIコンポーネントの「動的変数タイプ」が一致しない場合(この場合は_Vector2
_ for ScrollRect
)、他のUIコンポーネントのイベントコールバックリストでは「動的」として表示されません。 )。
メソッドのシグネチャは、動的変数の型である必要があります。つまり、public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {}
は、コンポーネントのイベントコールバックリストに「動的」として表示されません。
私は何も省かなかったといいのですが、これは十分に文書化されていません(または簡単に見つけることができません)。お役に立てば幸いです。
これとまったく同じ問題がありました。古いスライダーは適切にバインドされていましたが、新しいスライダーは値を入力するプレースホルダーを示していました。以前のスライダーでも、それに触れてまったく同じ方法に変更すると、値のプレースホルダーが表示され、常にゼロが送信されていました。ちょうど1時間前にスライダーを追加しましたが、スライダーのOnChangedを変更すると、プレースホルダーの値が表示されます。そのときに静的フィールドをターゲットクラスに追加しましたが、それが原因かどうかはわかりません。