如何在Unity脚本中创建正交的AnimationCurve并正确应用?
修改AnimationCurve实现预期曲线
问题分析
你当前代码的核心问题是在同一横坐标位置添加了两个关键帧,这会让曲线在该点产生垂直突变(也就是第二张图的效果),而预期的曲线需要一段平滑过渡的区间。
修改后的代码
假设你需要的曲线分为三个阶段:
- 从x=0到指定起始点,保持y=0.1的平直段
- 从起始点到过渡结束点,平滑降到y=0.02
- 从过渡结束点到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
相关产品推荐
相关产品推荐

