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

如何在Unity脚本中创建正交的AnimationCurve并正确应用?

修改AnimationCurve实现预期曲线

问题分析

你当前代码的核心问题是在同一横坐标位置添加了两个关键帧,这会让曲线在该点产生垂直突变(也就是第二张图的效果),而预期的曲线需要一段平滑过渡的区间。

修改后的代码

假设你需要的曲线分为三个阶段:

  1. 从x=0到指定起始点,保持y=0.1的平直段
  2. 从起始点到过渡结束点,平滑降到y=0.02
  3. 从过渡结束点到x=1,保持y=0.02的平直段

可以这样调整代码:

{
    AnimationCurve curve = new AnimationCurve();
    float transitionStart = (float)(colCount*2 + rowCount*2 + 3) / gridPoint.Count;
    // 自定义过渡段长度,可根据需求调整,避免超过1
    float transitionEnd = Mathf.Min(transitionStart + 0.1f, 1f);

    // 第一平直段:保持0.1,切线设为0确保水平
    curve.AddKey(new Keyframe(0.0f, 0.1f, 0, 0));
    curve.AddKey(new Keyframe(transitionStart, 0.1f, 0, 0));

    // 过渡段:从0.1到0.02,这里用线性过渡,可调整切线实现平滑曲线
    curve.AddKey(new Keyframe(transitionEnd, 0.02f, 0, 0));

    // 第二平直段:保持0.02
    curve.AddKey(new Keyframe(1f, 0.02f, 0, 0));

    lr.widthCurve = curve;
}

关键细节调整

  • 若想要过渡段是平滑曲线而非线性,可修改过渡帧的切线参数:
    curve.AddKey(new Keyframe(transitionStart, 0.1f, 0, -1));
    curve.AddKey(new Keyframe(transitionEnd, 0.02f, -1, 0));
    
  • 你可以根据gridPoint.Count动态计算transitionEnd,比如设置为transitionStart + (1 - transitionStart) * 0.2f,让过渡段占剩余区间的20%,更适配不同场景。

内容的提问来源于stack exchange,提问作者D.A.KANG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:27:45