2016-12-29 35 views
0

在我的Unity項目中,我基於JSON響應動態創建切換,然後向每個切換添加一個偵聽器。現在,每次我點擊切換按鈕,它都會成功調用SomeListener函數。但是,我只能傳遞切換值(truefalse),理想情況下,我希望能夠將切換值和額外參數(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

嘗試

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

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

這些被稱爲lambda表達式,你可以找到更多關於他們here

+0

但是,失去布爾值:該MyStudentListener功能,可如果你想省略。 – Everts

+0

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

0

不,你不能這樣做直接但這是一種方法來做到這一點。嘗試以下(我沒有測試過,但你會明白)。您必須向類型爲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) ; 
相關問題