XericSplinePath,XericRectSplinePath组件。
+他们的区别是,一个用于三维世界,另一个用于UI界面。
+UI界面上的Spline组件会通过RectTransform控制,有区别与三维世界。
+XericSplinePath可以直接在unity中进行挂载,并通过界面编辑点,在列表中可以增加和减少点,或改变点的顺序。
-### 简易批处理器
+在脚本中使用XericSplinePath定义字段,可以让脚本在inspecter上呈现一个引用端口,引用组件以获取曲线实例。
+
+曲线通常用于静态计算,在设计上并未考虑动态刷新,动态构建曲线的方法,如果希望动态地构建曲线,可以自行根据其中的结构提供点位数据。
+在XericSplinePath曲线上初始时使用BakePoint()来烘焙一次数据,这个方法会在线组件上生成BakeData,有这个数据可以获得速度正确的的曲线映射,如果担心多个烘焙进行时的性能问题,可以使用协程方法BakePointCoroutine()进行烘焙。
+在曲线实例上可以访问Evaluate...()方法来计算坐标,旋转,数值,颜色过度。
+方法要求给定一个驱动值t,取值范围在0-1之间。
+默认情况下,驱动值是几乎等分地控制着每条线路的,无论两个点之间的距离长短,都近似为长度相等的多段线,这意味着无法通过这样的一个线驱动一个物体平滑地从起点运动到终点。
+而开头我们使用BakePoint()烘焙的数据就起作用了,通过调用线实例上的RemappingTimeValue()将时间驱动值转换为速度驱动值,这会带来非常平滑的效果。
+
+2D的线路组件XericRectSplinePath工作在Rect上,如果屏幕的工作分辨率实际上是可变的,可能会导致线路有时会错位,这是因为线路工作的参考坐标是静态的。
+如果当前项目的窗口缩放易变,建议每帧调用UpdateRectDepend()(一般都很难遇到分辨率亘古不变的情况),这个方法可以刷新曲线依赖的矩形空间坐标。
+
+为了适配速度矫正后的线路,建议使用线路的长度作为循环的时间最大值,线路长度可以使用SplineLength属性获取。
+这里是一个示例:(这个示例中ui是世界空间的,并非屏幕空间,但驱动的目标对象还是世界空间的Sprite,同时较小的ui坐标便于计算尾迹的长度,避免结果速度太快)
+```
+public void UpdateBySpline(XericRectSplinePath spline)
+{
+ totalTime = (float)spline.SplineLength;
+ var remappingTime = time / totalTime; // 这是没有速度矫正的值
+ remappingTime = spline.RemappingTimeValue(remappingTime); // 经过速度矫正
+ // 设置坐标
+ var pos = spline.EvaluatePosition(remappingTime); // 获得坐标
+ transform.position = pos;
+ // 设置旋转朝向运动方向
+ var lastOffset = (lastPosition - pos).normalized;
+ var ang = Mathf.Atan2(lastOffset.y, lastOffset.x) * Mathf.Rad2Deg;
+ transform.localRotation = Quaternion.Euler(0, 0, ang);
+ lastPosition = pos;
+ // 设置缩放,来自曲线上定义的浮点值
+ var size = spline.EvaluateValue(remappingTime);
+ transform.localScale = size;
+}
+```
+
+#### 简易批处理器
+----
在代码中引用 XericLibrary.Runtime.Type.BatchProcess ,
并将需要进行批处理的对象实现 ICanBatchProcessDdA|{qHb6
zUd5!VMw WM4P#=3lb9|qDLB2z+EiPX~q=`X{Q!K2U9wnCHbLhTd
z5dVn`ex?JZ0nTp77Py%(%+^0E>-eN$Eyi!Q*1+8=347xpW>m&cY%ZzH=rycpkmRAm
zU5t*08zyQ=P3jNkrta13`y#c3?CP;HIuiXN8Xl!A)m4hZc6GusPizCeNr}b6b1}QE
z1?aihj@$(5T}P7vcf0B)hOV9
LPey!-(XW;8H;PKCocn94oVO~&d21)uyiQRm+PA{t{*{!B0+~VP4ZU^z
z-?aN*Y?0`
Q59!Bfbb0gwI@
zJbvrrP@e8#xIn>I!a9&e6<=7-E@MsWVpatGg`C@Fuoe!&!rt%_EfciSh~EPml&`hf
zI2>;mm@c2Sy^t1()IvA>6V*s`rm^bsUZN7ZnXum12{rn