C# 使用单独的时间步长';s位置数据到Lerp变换位置?

C# 使用单独的时间步长';s位置数据到Lerp变换位置?,c#,.net,unity3d,coroutine,lerp,C#,.net,Unity3d,Coroutine,Lerp,我有一个很大的数据集,它以0.1秒的间隔包含一辆车的位置数据,我一直在尝试获取这些数据,并沿着这些位置平滑地设置一个游戏对象的动画 我尝试过使用AnimationCurves并为各个轴添加与此类似的关键帧 public AnimationCurve ac; public AnimationCurve ac1; public Vector3 pos1 = new Vector3(0.0f, 0.0f, 0.0f); public Vector3 pos2 = new

我有一个很大的数据集,它以0.1秒的间隔包含一辆车的位置数据,我一直在尝试获取这些数据,并沿着这些位置平滑地设置一个游戏对象的动画

我尝试过使用AnimationCurves并为各个轴添加与此类似的关键帧

    public AnimationCurve ac;
    public AnimationCurve ac1;
    public Vector3 pos1 = new Vector3(0.0f, 0.0f, 0.0f);
    public Vector3 pos2 = new Vector3(0.0f, 0.0f, 0.0f);

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(Move(pos1, pos2, ac, ac1, 3.0f));
        }
    }

    IEnumerator Move(Vector3 pos1, Vector3 pos2, AnimationCurve ac, AnimationCurve ac1, float time)
    {
        float timer = 0.0f;
        while (timer <= time)
        {
            var x = Mathf.Lerp(pos1.x, pos2.x, ac.Evaluate(timer / time));
            var y = Mathf.Lerp(pos1.y, pos2.y, ac1.Evaluate(timer / time));

            transform.position = new Vector3(x, y, 0);
            timer += Time.deltaTime;
            yield return null;
        }
    }
公共动画曲线ac;
公共动画曲线ac1;
公共向量3位置1=新向量3(0.0f,0.0f,0.0f);
公共向量3位置2=新向量3(0.0f,0.0f,0.0f);
无效更新()
{
if(Input.GetKeyDown(KeyCode.Space))
{
开始例行程序(移动(位置1、位置2、ac、ac1、3.0f));
}
}
IEnumerator移动(向量3位置1、向量3位置2、动画曲线ac、动画曲线ac1、浮动时间)
{
浮动定时器=0.0f;

虽然(计时器)你想用这个达到什么?因为如果你把第一个脚本放在一个游戏对象上,并将它的向量和动画曲线设置为不同的值,那么0应该会移动对象。我想我正在努力将哪些值插入关键帧。添加参数。我是否通过使用它们位置的变化来获得变化速度要添加的值或其他可能的值?例如,当汽车沿着道路行驶并右转时,随着时间的推移,x和z值的变化将在动画曲线右侧发生变化?不确定这是否有帮助,但GoKit显然内置了对沿给定路径进行二次变换的支持()。动画的最长秒时间为步数*0.1。(如果您需要物理刚体感觉,可能可以根据您的时间和位置数据计算每个点的速度,以及它们之间的FixedUpdate Vector3.Lerp和assign ForceMode.VelocityChange中的time.deltaTime。)那么,将
foreach
移动到协同程序内部如何?也不确定为什么在该程序中,您会先
等待几秒钟
,然后进行转换?一般来说,听起来您更愿意使用
动画师
时间线
。为什么要在脚本中执行此操作?您想使用什么这是因为如果你将第一个脚本放在一个游戏对象上,并将它的向量和动画曲线设置为不同的值,那么0应该会移动该对象。我猜我正在努力将哪些值插入关键帧。添加参数。我是通过使用它们位置的变化作为要添加的值来获得变化速度,还是通过其他方式来获得变化速度是吗?例如,当汽车沿道路行驶并右转时,随着时间的推移,x和z值的变化将在动画曲线右侧发生变化?不确定这是否有帮助,但GoKit显然内置了对沿给定路径进行变换的支持()。动画的最长秒数时间为步长*0.1。(如果你需要一个物理刚体的感觉,也许你可以根据你的时间和位置数据,以及它们之间的FixedUpdate Vector3.Lerp和assign ForceMode.VelocityChange中的time.deltaTime计算每个点的速度。)那么,将
foreach
移动到协同程序内部如何?也不确定为什么在该程序中,您会先
等待几秒钟
,然后进行转换?一般来说,听起来您更愿意使用
动画师
时间线
。为什么在脚本中这样做?
   var coords = vehicles[0].middleCoords;
        var previousStep = coords[0];
        foreach(Vector3 step in coords)
        {
            MoveOverSeconds(step, 0.1f);
        }

  public IEnumerator MoveOverSeconds(Vector3 end, float seconds)
    {
        yield return new WaitForSeconds(seconds);
        float elapsedTime = 0;
        Vector3 startingPos = transform.position;
        while (elapsedTime < seconds)
        {
            transform.position = Vector3.Lerp(startingPos, end, (elapsedTime / seconds));
            elapsedTime += Time.deltaTime;
            yield return new WaitForEndOfFrame();
        }
        transform.position = end;