我有一個定義了切換器的結構陣列。我正在為它們中的每一個添加一個監聽器。現在我想知道,當用戶按壓某個切換器以改變其值時,哪個切換器被改變了。我如何從我的腳本中知道哪個切換器被改變并將其作為一個索引?
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ToggleData : MonoBehaviour {
[System.Serializable] 。
public struct toggleInfo {
public Toggle toggle。
public TextMeshProUGUI toggleText;
}
public toggleInfo[] toggles;
public int toggleIndex = 0;
//Start在第一幀更新前被呼叫。
void Start () {
for (int i = 0; i < toggles.Length; i ) {
toggles[i].toggle.onValueChanged.AddListener(delegate {
ToggleValueChanged(toggles[i].toggle)。
});
}
}
void ToggleValueChanged (Toggle change) {
Debug.Log ("toggle changed" toggleIndex); /Get the index here
}
}
uj5u.com熱心網友回復:
你可以,例如,使用
for (int i = 0; i< toggles.Length; i )
{
//由于Linda運算式中的變數捕捉,你必須存盤。
//每一個i的值都在一個新的變數中。
// See https://docs.microsoft.com/dotnet/csharp/language-reference/operators/lambda-expressions#capture-of-outer-variables-and-variable-scope-in-lambda-expressions
// and e.g. https://stackoverflow.com/questions/271440/captured-variable-in-a-loop-in-c-sharp
var index = i;
toggles[index].toggle.onValueChanged.AddListener(()=>;ToggleValueChanged(toggles[index].toggle,index))。
}
并且有
void ToggleValueChanged (Toggle change, int index)。
{
Debug.Log ("toggle changed" index)。
}
另外,不要使用結構,而是使用類
public class toggleInfo{ ... }
并使用
for (int i = 0; i< toggles.Length; i )
{
//由于Linda運算式中的變數捕捉,你必須要存盤。
//每一個i的值都在一個新的變數中。
// See https://docs.microsoft.com/dotnet/csharp/language-reference/operators/lambda-expressions#capture-of-outer-variables-and-variable-scope-in-lambda-expressions
// and e.g. https://stackoverflow.com/questions/271440/captured-variable-in-a-loop-in-c-sharp
var index = i;
toggles[index].toggle.onValueChanged.AddListener(()=>;ToggleValueChanged(toggles[index]))。
}
并且有
void ToggleValueChanged(toggleInfo info)
{
Debug.Log ("toggle changed" Array.IndexOf(toggles, info))。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329094.html
標籤:
