Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Vector3.Lerp仅执行第一次线性插值_C#_Unity3d_Lerp - Fatal编程技术网

C# Vector3.Lerp仅执行第一次线性插值

C# Vector3.Lerp仅执行第一次线性插值,c#,unity3d,lerp,C#,Unity3d,Lerp,当用户在键盘上输入左键或右键时,我试图让玩家飞船在三个点之间移动。我希望玩家在这些点之间平稳移动,但是Lerp函数似乎只插值一次 下面是游戏主机脚本,它检查用户的输入并将其传递到执行Lerp的玩家控制器: 游戏大师: void Update () { if (gameIsRunning) { if (Input.GetKeyDown(KeyCode.A)) { //Go Left player.Mov

当用户在键盘上输入左键或右键时,我试图让玩家飞船在三个点之间移动。我希望玩家在这些点之间平稳移动,但是
Lerp
函数似乎只插值一次

下面是
游戏主机
脚本,它检查用户的输入并将其传递到执行
Lerp的
玩家控制器

游戏大师:

void Update ()
{
    if (gameIsRunning)
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            //Go Left
            player.MovePlayer("left");
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            //Go Right
            player.MovePlayer("right");
        }

        //Only run this if the game is running...
        if (player.Lives <= 0)
        {
            gameIsRunning = false;
        }
    }
}
public void MovePlayer (string dir)
{
    if (dir == "left")
    {
        if (currentPosition == Position.Left)
        {
            //Do Nothing!
            return;
        }

        if (currentPosition == Position.Middle)
        {
            transform.position = Vector3.Lerp(middlePos.position, leftPos.position, .5f);
            currentPosition = Position.Left;
        }

        if (currentPosition == Position.Right)
        {
            transform.position = Vector3.Lerp(rightPos.position, middlePos.position, .5f);
            currentPosition = Position.Middle;
        }
    }

    if (dir == "right")
    {
        if (currentPosition == Position.Right)
        {
            //Do Nothing!
            return;
        }

        if (currentPosition == Position.Middle)
        {
            transform.position = Vector3.Lerp(transform.position, rightPos.position, .5f);
            currentPosition = Position.Right;
        }

        if (currentPosition == Position.Left)
        {
            transform.position = Vector3.Lerp(transform.position, middlePos.position, .5f);
            currentPosition = Position.Middle;
        }
    }
}
屏幕截图:

void Update ()
{
    if (gameIsRunning)
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            //Go Left
            player.MovePlayer("left");
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            //Go Right
            player.MovePlayer("right");
        }

        //Only run this if the game is running...
        if (player.Lives <= 0)
        {
            gameIsRunning = false;
        }
    }
}
public void MovePlayer (string dir)
{
    if (dir == "left")
    {
        if (currentPosition == Position.Left)
        {
            //Do Nothing!
            return;
        }

        if (currentPosition == Position.Middle)
        {
            transform.position = Vector3.Lerp(middlePos.position, leftPos.position, .5f);
            currentPosition = Position.Left;
        }

        if (currentPosition == Position.Right)
        {
            transform.position = Vector3.Lerp(rightPos.position, middlePos.position, .5f);
            currentPosition = Position.Middle;
        }
    }

    if (dir == "right")
    {
        if (currentPosition == Position.Right)
        {
            //Do Nothing!
            return;
        }

        if (currentPosition == Position.Middle)
        {
            transform.position = Vector3.Lerp(transform.position, rightPos.position, .5f);
            currentPosition = Position.Right;
        }

        if (currentPosition == Position.Left)
        {
            transform.position = Vector3.Lerp(transform.position, middlePos.position, .5f);
            currentPosition = Position.Middle;
        }
    }
}


为什么会发生这种情况?

必须使用不断变化的参数调用lerp。尝试以下方法:

播放器控制器:

enum Direction
{
    Left,
    Right
}

Direction moveDir;
float progress;

public void MovePlayer (Direction dir)
{
    moveDir = dir;
    progress = 0.0f;
}

public void Update()
{
    switch(dir)
    {
        case Direction.Left:
        if (currentPosition == Position.Middle)
        {
            transform.position = Vector3.Lerp(middlePos.position, leftPos.position, progress);
            if(progress >= 1.0f)
                currentPosition = Position.Left;
            else
                progress += 0.1f; // change as necessary
        }

        if (currentPosition == Position.Right)
        {
            transform.position = Vector3.Lerp(rightPos.position, middlePos.position, progress);
            if(progress >= 1.0f)
                currentPosition = Position.Middle;
            else
                progress += 0.1f; // change as necessary
        }
        break;
        case Direction.Right:
        // ...
        break;
    }
}