unity3d GetAxisRaw不接受右侧的输入

wn9m85ua  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(132)

对于我的计算机科学A-Level编程项目,我正在开发一个游戏,我想包括一个加速和动量系统类似于创世纪声波游戏。我已经创建了一个加速系统,但由于某种原因,它只允许我的角色向左移动,而不是向右。由于明显的原因,我需要它向右移动。
下面是我的代码。它是用C#写的:

float acceleration_speed = 0.46875f;
 float deceleration_speed = 5.0f;
 float friction_speed = 0.66875f;
 float top_speed = 60.0f;
 float horizontalMove = 0f;

 if (Input.GetAxisRaw("Horizontal") < 0) //if player is pressing left
        {
            if (horizontalMove > 0.0f)
            {
                horizontalMove -= deceleration_speed; //decelerate

                if (horizontalMove <= 0.0f)
                {
                    horizontalMove = -0.5f;
                }
            }

            else if (horizontalMove > -top_speed)
            {
                horizontalMove -= acceleration_speed; //accelerate
                if (horizontalMove <= -top_speed)
                {
                    horizontalMove = -top_speed; //impose top speed limit
                }
            }

        }

        if (Input.GetAxisRaw("Horizontal") > 0) //if player is pressing right
        {
            if (horizontalMove < 0.0f) //if moving to the left
            {
                horizontalMove += deceleration_speed; //decelerate
                if (horizontalMove >= 0.0f)
                {
                    horizontalMove = 0.5f;
                }

                else if (horizontalMove < top_speed)
                {
                    horizontalMove += acceleration_speed; //accelerate
                    if (horizontalMove >= top_speed)
                    {
                        horizontalMove = top_speed; //impose top speed limit
                    }
                }
            }
        }

        if (Input.GetAxis("Horizontal") == 0)
        {
            horizontalMove -= friction_speed; //decelerate
            if (horizontalMove <= 0)
            {
                horizontalMove = 0.0f;
            }
        }

我使用Input.GetAxisRaw告诉程序玩家是向左移动(-1)还是向右移动(1),或者根本不移动(0)。
我创建了这样一个条件:如果Input.GetAxisRaw〈0(即向左移动),系统将向那个方向加速角色;如果Input.GetAxisRaw〉0(即向右移动),系统将向那个方向加速角色;如果角色已经在移动,系统将产生摩擦力来减速角色,直到它的速度为0;如果玩家角色根本没有移动,则什么也不会发生。
这段代码在我按住左边的输入不做任何事情的时候有效,但是当我按住右边的输入时,它就不起作用了,因为玩家角色根本不动。

q7solyqu

q7solyqu1#

比较你的if (Input.GetAxisRaw("Horizontal") < 0)块和if (Input.GetAxisRaw("Horizontal") > 0)块的代码,你会发现你把else if块放错地方了。它在if (horizontalMove < 0.0f) { ... }里面,所以如果你的角色没有向左移动,它永远不会触发。

if (Input.GetAxisRaw("Horizontal") > 0) //if player is pressing right
        {
            if (horizontalMove < 0.0f) //if moving to the left
            {
                horizontalMove += deceleration_speed; //decelerate
                if (horizontalMove >= 0.0f)
                {
                    horizontalMove = 0.5f;
                }
            }  // added
            else if (horizontalMove < top_speed)
            {
                horizontalMove += acceleration_speed; //accelerate
                if (horizontalMove >= top_speed)
                {
                    horizontalMove = top_speed; //impose top speed limit
                }
            }
            //}  removed
        }
2j4z5cfb

2j4z5cfb2#

你错过了}

if (Input.GetAxisRaw("Horizontal") > 0) //if player is pressing right
        {
            if (horizontalMove < 0.0f) //if moving to the left
            {
                horizontalMove += deceleration_speed; //decelerate
                if (horizontalMove >= 0.0f)
                {
                    horizontalMove = 0.5f;
                }
//HERE YOU MISS }
                else if (horizontalMove < top_speed)
                {
                    horizontalMove += acceleration_speed; //accelerate
                    if (horizontalMove >= top_speed)
                    {
                        horizontalMove = top_speed; //impose top speed limit
                    }
                }
            }
        }

我建议重写它,这样它就可以使用-1和1输入。因为你会一遍又一遍地重复相同的代码。

相关问题