Unity中的C# Lambda表达式
Lambda表达式是C#中一种简洁的匿名函数写法,在Unity开发中可以大大简化代码。本文将介绍Lambda在Unity中的常见用法。
基本语法
Lambda表达式的基本格式:
csharp
(参数列表) => { 表达式或语句块 }
示例:
csharp
// 无参数Lambda
Action action = () => Debug.Log("Hello Lambda");
// 带参数Lambda
Func<int, int> square = x => x * x;
在Unity中的常见应用
1. 简化委托
传统委托写法:
csharp
button.onClick.AddListener(delegate() {
Debug.Log("Button clicked");
});
使用Lambda简化:
csharp
button.onClick.AddListener(() => Debug.Log("Button clicked"));
2. 事件处理
csharp
// 传统事件订阅
someEvent += HandleEvent;
void HandleEvent(object sender, EventArgs e) { /*...*/ }
// 使用Lambda简化
someEvent += (sender, e) => { /*...*/ };
3. LINQ查询
csharp
// 查找所有血量低于30%的敌人
var weakEnemies = enemies.Where(e => e.Health < e.MaxHealth * 0.3f);
// 按距离排序
var sorted = enemies.OrderBy(e => Vector3.Distance(e.Position, player.Position));
4. 协程中的使用
csharp
StartCoroutine(WaitAndDo(() => {
// 等待2秒后执行的代码
Debug.Log("2秒后执行");
}, 2f));
IEnumerator WaitAndDo(Action action, float delay) {
yield return new WaitForSeconds(delay);
action();
}
注意事项
- 避免在频繁调用的地方使用复杂Lambda,可能影响性能
- 注意闭包捕获的变量可能带来的内存泄漏问题
- 对于需要多次调用的逻辑,考虑使用传统方法更清晰
总结
Lambda表达式能让Unity代码更简洁,特别是在事件处理、委托和LINQ查询等场景中非常有用。但要合理使用,避免过度简化影响可读性。