1.新增了SplineAnchor的旋转跟随2.修复了IInteraction交互物体的乱序错误

This commit is contained in:
2025-10-08 21:47:18 +08:00
parent 0c11c917c4
commit 943c86d5f5
55 changed files with 329 additions and 555 deletions

View File

@@ -33,6 +33,10 @@ namespace Demo.Game
public abstract Vector3 EvaluateClipToPosition(float time);
public abstract SplineSample EvaluateClipFrom(float time);
public abstract SplineSample EvaluateClipTo(float time);
public override IEnumerator LoadScript(string script)
{
yield return base.LoadScript(script);
@@ -188,5 +192,15 @@ namespace Demo.Game
{
return MySplineCore.MySplineComputer.EvaluatePosition(Evaluate(time).ClipTo);
}
public override SplineSample EvaluateClipFrom(float time)
{
return MySplineCore.MySplineComputer.Evaluate(Evaluate(time).ClipFrom);
}
public override SplineSample EvaluateClipTo(float time)
{
return MySplineCore.MySplineComputer.Evaluate(Evaluate(time).ClipTo);
}
}
}

View File

@@ -50,23 +50,52 @@ namespace Demo.Game
/// <summary>
/// 绑定到样条线渲染器上(必须已经加载),
/// 并设置位置为指定时间的时刻渲染器所生成的头部位置
/// 并设置跟随指定时间的时刻渲染器所生成的头部
/// </summary>
/// <param name="path">对象路径, 不存在时则立刻加载</param>
/// <param name="time">时刻</param>
/// <param name="isFollowPosition">是否跟随位置, 默认开启</param>
/// <param name="isFollowRotation">是否跟随旋转, 默认开启</param>
[ScriptableCall(@"
<summary>
绑定到样条线渲染器上(必须已经加载),
并设置位置为指定时间的时刻渲染器所生成的头部位置
并设置跟随指定时间的时刻渲染器所生成的头部
</summary>
<param name=""path"">对象路径, 不存在时则立刻加载</param>
<param name=""time"">时刻</param>
<param name=""isFollowPosition"">是否跟随位置, 默认开启</param>
<param name=""isFollowRotation"">是否跟随旋转, 默认开启</param>
")]
public void LoadSplineRenderer(string path, string time)
public void LoadSplineRenderer(string path, string time, string isFollowPosition = "true", string isFollowRotation = "true")
{
MySplineRenderer = this.LoadSplineRendererTool(path);
MySplineOffset = Parse(time);
Updater =()=> transform.position = MySplineRenderer.EvaluateClipToPosition(MySplineOffset);
bool bIsFollowPosition = ConvertValue<bool>(isFollowPosition);
bool bIsFollowRotation = ConvertValue<bool>(isFollowRotation);
if (bIsFollowPosition && bIsFollowRotation)
{
Updater = () =>
{
var result = MySplineRenderer.EvaluateClipTo(MySplineOffset);
transform.position = result.position;
transform.rotation = result.rotation;
};
}
else if (bIsFollowPosition)
{
Updater = () =>
{
transform.position = MySplineRenderer.EvaluateClipToPosition(MySplineOffset);
};
}
else
{
Updater = () =>
{
var result = MySplineRenderer.EvaluateClipTo(MySplineOffset);
transform.rotation = result.rotation;
};
}
}
}
}