C# 统一平滑二维水平变换

C# 统一平滑二维水平变换,c#,unity3d,C#,Unity3d,目前,我有一个手机脚本,屏幕上只有一个球,当你触到球的左边时,它会向左移动,当你触到球的右边时,它会向右移动。然而,当它移动时,它是不平滑的,除非我降低它移动多少的浮动(这导致它太慢)。如何在运动平稳的同时保持快速的翻译速度 if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); var point = Camera.main.ScreenToWorldPoint(new Vecto

目前,我有一个手机脚本,屏幕上只有一个球,当你触到球的左边时,它会向左移动,当你触到球的右边时,它会向右移动。然而,当它移动时,它是不平滑的,除非我降低它移动多少的浮动(这导致它太慢)。如何在运动平稳的同时保持快速的翻译速度

if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);

        var point = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y,
            transform.position.z - Camera.main.transform.position.z));

        float dx = point.x - transform.position.x;
        if (point.x < transform.position.x)
        {
            //transform.Translate(-15f * Time.deltaTime, 0, 0);

            transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)), 0, 0);


        }
        else if (point.x >= transform.position.x + 0.5f)
        {
            //transform.Translate(15f * Time.deltaTime, 0, 0);
            transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)), 0, 0);
        }
    }
if(Input.touchCount>0)
{
Touch-Touch=Input.GetTouch(0);
var point=Camera.main.ScreenToWorldPoint(新矢量3(touch.position.x,touch.position.y,
transform.position.z-Camera.main.transform.position.z);
float dx=point.x-transform.position.x;
if(点x<变换位置x)
{
//transform.Translate(-15f*Time.deltaTime,0,0);
transform.Translate(dx*(1-Mathf.Pow(0.5f,Time.deltaTime/halfWayTime)),0,0;
}
else if(点x>=变换位置x+0.5f)
{
//transform.Translate(15f*Time.deltaTime,0,0);
transform.Translate(dx*(1-Mathf.Pow(0.5f,Time.deltaTime/halfWayTime)),0,0;
}
}
这会创建一个开始很快,但最后会变慢的运动模式,并且可以随时编辑targetX
halfWayTime
是对象将完成其到目标的一半路径的时间,如果为0.1,则在0.1s内,它将移动初始距离的50%,0.2s-75%,0.3s-87.5%,依此类推

顺便说一下,您可以修改此代码以使用所有坐标:

void Update () {
    transform.position = Vector3.Lerp (
        target,
        transform.position,
        Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)
    );
}

这很有效,但只沿负x轴,在正方向,它似乎跳了很多。你知道为什么>它应该以相同的方式在两个方向上工作吗@马特,你有没有把代码改成相反的方向?如果是,你不应该。请告诉我你是如何设置targetX的,也许是因为targetX,我计算出用户手指触摸的点,然后计算出它相对于世界而不是屏幕的位置,我知道这很好。我没有更改另一个方向的代码。我将更新我的问题以显示新代码。只需删除不必要的if语句就可以了!谢谢你的帮助!
void Update () {
    transform.position = Vector3.Lerp (
        target,
        transform.position,
        Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)
    );
}