1.UnityAction<string> onValueChanged
是一个委托类型的参数,用来接收一个方法,并且这个方法必须接受一个 string 类型的参数并且没有返回值。在这个方法中,该参数用于接收一个回调函数,这个回调函数的功能是在增加或减少数值后执行一些操作,例如更新其他UI元素或执行其他逻辑。
public GameObject AddStepperWidget(string name, float min, float max, float step,
float defaultValue, UnityAction<string> onValueChanged)
{......}
UnityAction<T>
是 Unity 引擎中的委托类型,它允许你将方法作为参数传递,并且可以定义参数类型。在这种情况下,UnityAction<string>
表示接受一个 string 类型的参数的方法。
2.Lambda 表达式定义匿名函数或委托
btn_add.onClick.AddListener(() =>
{
var now = GetStepperValue(effect);
var next = Mathf.Clamp(float.Parse(now) + step, min, max);
effect.GetComponentsInChildren<Text>()[1].text = next.ToString();
onValueChanged(next.ToString());
});
这种写法使用了 Lambda 表达式,它是一种简洁的写法,用于定义匿名函数或委托。
Lambda 表达式通常用于在需要传递函数作为参数的地方,以提供更简洁的语法。
在这个例子中,btn_add.onClick.AddListener()
方法需要传递一个委托作为参数,用于监听按钮点击事件。
Lambda 表达式 () => { ... }
定义了一个匿名函数,这个函数包含了按钮点击时要执行的代码块。这样就避免了显式地定义一个具名方法,而是直接将方法的内容放在了 AddListener()
方法的括号内。
Lambda 表达式的形式是 () => { ... }
,其中 ()
用于传递参数(如果有的话),=>
表示“变成”,后面的 { ... }
是匿名函数体,包含了要执行的代码。
在 btn_add.onClick.AddListener
中,Lambda 表达式内的 onValueChanged(next.ToString())
是一个方法调用。这里将 next.ToString()
作为参数传递给 onValueChanged
方法。
通常情况下,onValueChanged
方法用于在 UI 元素的值发生变化时触发某些操作。在这个 Lambda 表达式中,它的作用是在点击 “增加” 按钮后,将新的数值传递给一个回调函数,以便在数值发生改变时执行一些特定的操作。
onValueChanged
是一个委托类型的参数,在传递给 AddStepperWidget
方法时,它的类型是 UnityAction<string>
,表示它是一个接受一个 string 类型参数的委托。
因此,Lambda 表达式中的 onValueChanged(next.ToString())
实际上是调用了这个委托,并将 next.ToString()
作为参数传递给了这个委托。