根据速度预测UI将登陆的位置(滚动统一)

时间:2017-11-23 16:03:11

标签: loops user-interface unity3d expression game-physics

我知道这可能不是一个正常的问题,但我认为你可以帮助我解决这个问题。

背景:我想创建一个scrollrect(一个可滚动的UI元素),它可以捕捉到它滚动的元素。所以它总是停在中心的一个元素。这些滚动条的滚动基于手指在离开屏幕时滑动的速度,如果输入某个速度,它总是移动相同的量(在1个像素内)。

所以我认为创建这个捕捉滚动矩形的最流畅的方法是预测滚动矩形将落在何处。然后调整减速率,使其落在最近的元素上。

基本上我想:

  1. 将此循环转换为数学函数,我可以输入速度&走出运动三角洲。

  2. 能够根据末端运动增量和数值计算出减速率应该是多少。速度。

  3. 这是scroll rect用于移动的代码:

    protected virtual void LateUpdate()
    {
         //It's probably easiest if you imagine positionX always starting at 0
         //but I'm no expert
    
         m_VelocityX *= Mathf.Pow(m_DecelerationRate, Time.unscaledDeltaTime);
         if (Mathf.Abs(m_VelocityX) < 1)
         {
             m_VelocityX = 0;
         }
         positionX += m_VelocityX * Time.unscaledDeltaTime;
    }
    

    每帧都调用LateUpdate,而positionX是我正在移动的UI的x位置。 (它包含我想要捕捉的UI元素)

    ScrollRect Code

    LateUpdate Info

    Mathf Info

    Time.unscaledDeltaTime Info

    这里有一些速度和运动增量(它走了多远),减速率为0.135,如果有帮助的话:

    速度500 - &gt; 490

    速度350 - &gt; 343

    速度200 - &gt; 195

    速度-200 - &gt; -195

    Velocity -400 - &gt; -391

    Ty非常感谢你的帮助!这种数学方法让我很难理解,但我认为它会变得很酷!

0 个答案:

没有答案