You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用Lambda函数简化Unity状态机脚本中的指定代码行?

用Lambda表达式简化Unity StateMachineBehaviour代码

当然可以!你的Increment方法逻辑非常简单——就是接收一个浮点值,返回它加上Time.deltaTime的结果,完全可以用Lambda表达式来替代,让目标代码更紧凑,还能省去单独定义方法的麻烦。

修改后的完整代码

using UnityEngine;
public class IdleBehavior : StateMachineBehaviour {
    public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
        // 用Lambda表达式内联替代原Increment方法
        animator.SetFloat("Counter", ((Func<float, float>)(t => t + Time.deltaTime))(animator.GetFloat("Counter")));
    }
}

代码解释

  • 这里的Lambda表达式 t => t + Time.deltaTime 和你原来的Increment方法功能完全等价:它接收一个参数t,返回t + Time.deltaTime的计算结果。
  • 我们把这个Lambda包装成Func<float, float>委托类型,然后直接传入当前从Animator获取的Counter值并执行,一步完成值的递增和设置。

如果你觉得上面的写法有点冗余,其实还有更简洁的等价写法(虽然没有显式用Lambda,但逻辑完全一致):

animator.SetFloat("Counter", animator.GetFloat("Counter") + Time.deltaTime);

不过既然你明确要求用Lambda表达式简化,第一种写法就是符合需求的实现方式。

内容的提问来源于stack exchange,提问作者Sean Carey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:29:54