Skip to content
On this page

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();
}

注意事项

  1. 避免在频繁调用的地方使用复杂Lambda,可能影响性能
  2. 注意闭包捕获的变量可能带来的内存泄漏问题
  3. 对于需要多次调用的逻辑,考虑使用传统方法更清晰

总结

Lambda表达式能让Unity代码更简洁,特别是在事件处理、委托和LINQ查询等场景中非常有用。但要合理使用,避免过度简化影响可读性。

Released under the MIT License.