能否使用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
相关产品推荐
相关产品推荐

