更新spline说明

This commit is contained in:
2025-04-14 14:45:17 +08:00
parent 67e722ac45
commit af7c2bbec2
2 changed files with 47 additions and 4 deletions

View File

@@ -1,9 +1,13 @@
# SesothoLine
# Deconstruction
## 简介
unity通用库插件现已转为unity 6000版本。
此插件为XericDigitalTwinTool插件库的前置依赖项。与MateriaLibrary材质库一起使用更好哦
单独使用可能会遇到编译报错可以直接删除报错指向的文件。造成报错的原因可能是版本不兼容依赖项uid错误等等。如果能力足够请自行解决。
## 软件架构
* CentralizeLog: 小日志unity本身的日志在调用时开销巨大所以提供一个小日志的类型保存临时的日志内容。
@@ -192,12 +196,51 @@ XericLibrary 部分由两个dll组成一个是 Xeric Library另一个是 X
----
#### 独特类型
#### Spline组件
----
提供<code>XericSplinePath</code><code>XericRectSplinePath</code>组件。
他们的区别是一个用于三维世界另一个用于UI界面。
UI界面上的Spline组件会通过RectTransform控制有区别与三维世界。
<code>XericSplinePath</code>可以直接在unity中进行挂载并通过界面编辑点在列表中可以增加和减少点或改变点的顺序。
### 简易批处理器
在脚本中使用<code>XericSplinePath</code>定义字段可以让脚本在inspecter上呈现一个引用端口引用组件以获取曲线实例。
曲线通常用于静态计算,在设计上并未考虑动态刷新,动态构建曲线的方法,如果希望动态地构建曲线,可以自行根据其中的结构提供点位数据。
在<code>XericSplinePath</code>曲线上初始时使用<code>BakePoint()</code>来烘焙一次数据这个方法会在线组件上生成BakeData有这个数据可以获得速度正确的的曲线映射如果担心多个烘焙进行时的性能问题可以使用协程方法<code>BakePointCoroutine()</code>进行烘焙。
在曲线实例上可以访问<code>Evaluate...()</code>方法来计算坐标,旋转,数值,颜色过度。
方法要求给定一个驱动值t取值范围在0-1之间。
默认情况下,驱动值是几乎等分地控制着每条线路的,无论两个点之间的距离长短,都近似为长度相等的多段线,这意味着无法通过这样的一个线驱动一个物体平滑地从起点运动到终点。
而开头我们使用<code>BakePoint()</code>烘焙的数据就起作用了,通过调用线实例上的<code>RemappingTimeValue()</code>将时间驱动值转换为速度驱动值,这会带来非常平滑的效果。
2D的线路组件<code>XericRectSplinePath</code>工作在Rect上如果屏幕的工作分辨率实际上是可变的可能会导致线路有时会错位这是因为线路工作的参考坐标是静态的。
如果当前项目的窗口缩放易变,建议每帧调用<code>UpdateRectDepend()</code>(一般都很难遇到分辨率亘古不变的情况),这个方法可以刷新曲线依赖的矩形空间坐标。
为了适配速度矫正后的线路,建议使用线路的长度作为循环的时间最大值,线路长度可以使用<code>SplineLength</code>属性获取。
这里是一个示例这个示例中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
并将需要进行批处理的对象实现 ICanBatchProcess<T> 接口,
@@ -205,7 +248,7 @@ XericLibrary 部分由两个dll组成一个是 Xeric Library另一个是 X
缺点是只有异步方法的生命周期约束,没有提供线程安全的数据类型。
和官方的相比没有什么优势,只是为了此处使用的方便。
和官方的相比没有什么优势,只是作为dll内部的部分程序的替代品。
## DataBaseControl