2016-12-29 8 views
0

私のUnityプロジェクトでは、JSONレスポンスに基づいて動的にトグルを作成し、各トグルにリスナーを追加しています。今すぐトグルをクリックするたびに、SomeListener関数が正常に呼び出されます。しかし、私はトグル(trueまたはfalse)の値だけを渡すことができ、理想的には、トグルの値と追加の引数(student._id)の両方をリスナーに渡すことができるようにしたいと考えています。ユニティのイベントリスナーへの引数の受け渡し

foreach(var student in students) { 
     GameObject studentObject = (GameObject) Instantiate(StudentAttendancePreFab, currentPos, transform.rotation); 
     studentObject.GetComponent<AttendanceItem>().studentId = student._id; 
     studentObject.GetComponent<Toggle>().isOn = student.attending; 
     studentObject.GetComponent<Toggle>().onValueChanged.AddListener(SomeListener); 


     //is there some way to do this? 
     //studentObject.getComponent<Toggle>().onValueChanged.AddListener(SomeListener, student._id); 
} 

各トグルのリスナー。

void SomeListener (bool isClicked) { 
    Debug.Log(isClicked); 
} 

//is there some way to do this? 
//void SomeListener(bool isClicker, string studentId) { 
    //something 
//}} 

答えて

0

はこれらはありません、あなたがそれを行うことはできませんラムダ式と呼ばれ、あなたがそれらについての詳細情報here

+0

しかし、それはbool値を失う:あなたがしたい場合MyStudentListener機能を省略することができます。 – Everts

+0

(x、y)=> doSomething(x、y) –

0

を見つけることができます

studentObject.GetComponent<Toggle>().onValueChanged.AddListener((id)=> SomeListener(student._id)); 

void SomeListener (float id) { 
    Debug.Log("Student id?:"+id); 
} 

を試してみてくださいを直接に送信してください。以下を試してみてください(私はそれを試していませんが、あなたはそのアイデアを得るでしょう)。あなたの学生クラスにpublicフィールドを宣言して、あなたの学生に関連するアクションへの参照を保存し、必要に応じて後でそのリスナを削除するように、UnityEngine.Events.UnityAction型を宣言しなければなりません。

foreach(var student in students) { 
     // .. 
     string id = student._id ; 
     student.listener = MyStudentListener(id) ; 
     studentObject.GetComponent<Toggle>().onValueChanged.AddListener(student.listener); 
} 

// ... 

private UnityEngine.Events.UnityAction<bool> MyStudentListener(string id) 
{ 
    return (val) => SomeListener(val, id) ; 
} 

void SomeListener(bool isClicker, string studentId) { 
    // something 
}} 

注:

student.listener = (val) => SomeListener(val, id) ; 
関連する問題