更新X、Y、Z浮动和特定While循环场景C#

更新X、Y、Z浮动和特定While循环场景C#,c#,unity3d,while-loop,C#,Unity3d,While Loop,我有两个问题要解决 第一个问题。更改X、Y、Z移动并更新它 我的游戏中有一个驾驶技工,如果用户按下wasd,汽车就会移动。问题是,当按下S(向后)并保持直到松开时,我希望速度从15f降低到5f 下面是我的玩家脚本代码。 请参阅void playerwalk()和backward motion() } 但是,当松开S键时,背光不会关闭 我无法清楚地理解其他代码和答案是怎么回事,这就是我在这里提问的原因 提前谢谢你!我才刚开始上10年级的编程课,所以请像向年轻人解释一样解释。按下时,您没有对变换或旋

我有两个问题要解决

第一个问题。更改X、Y、Z移动并更新它

我的游戏中有一个驾驶技工,如果用户按下wasd,汽车就会移动。问题是,当按下S(向后)并保持直到松开时,我希望速度从15f降低到5f

下面是我的玩家脚本代码。 请参阅void playerwalk()和backward motion()

}

但是,当松开S键时,背光不会关闭

我无法清楚地理解其他代码和答案是怎么回事,这就是我在这里提问的原因


提前谢谢你!我才刚开始上10年级的编程课,所以请像向年轻人解释一样解释。

按下时,您没有对变换或旋转进行任何更改

if (Input.GetKeyDown(KeyCode.S))
    {var z = Input.GetAxis("Vertical") * Time.deltaTime * 5f;         
    }
//这个z去哪了????? //添加这个或任何你想要的“transform.Translate(0,0,-z);”

对于第二个问题,在另一个条件下使用GetKeyUp(),或者在相同条件下使用getkey

对于第一个问题,您声明了
var z
两次,但它们实际上是单独的值。 及

请参考两个不同的变量,它们的名称相同,但每个变量只存在于它在中声明的方法中。
playerWalk()
中的
z
backwardMotion()
中的
z
彼此无关。
backwardMotion()
中的
z
基本上没有任何用途,因为变量已声明,但从未在方法中的任何位置使用过

实现目标的正确方法是:

void playerWalk()
{
    var x = Input.GetAxis("Horizontal") * Time.deltaTime * 75f;
    var z = Input.GetAxis("Vertical") * Time.deltaTime * 15f;

    if (Input.GetKeyDown(KeyCode.S))
    {
        // If "S" is pressed, the z speed would be reduced to 5f.
        z = Input.GetAxis("Vertical") * Time.deltaTime * 5f; 
    }

    transform.Rotate(0, x, 0);
    transform.Translate(0, 0, -z);
}
对于第二个问题,有三种获取输入的方法:
input.GetKeyDown
input.GetKey
input.getkeydup
Input.GetKeyDown
仅在您按键的帧上调用一次

Input.GetKey
在按住键的每一帧调用一次

Input.GetKeyUp
仅在您释放键的帧上调用一次

在您的情况下,当检测到
Input.GetKeyDown(KeyCode.S)
时,您的汽车背光会打开,但当检测到释放时,没有任何东西可以让它关闭

解决方案是简单地检查释放装置并关闭前照灯:

if (Input.GetKeyUp(KeyCode.S)) // Detects a release of "S" key
{
    if (backlights && backlights2 && backlights3 && backlights4)
    {
        backlights.enabled = false;
        backlights2.enabled = false;
        backlights3.enabled = false;
        backlights4.enabled = false;
    }
}

非常感谢你。你为我节省了这么多时间来解决这个问题,我只能想象如果不是你,我会花多少个小时来解决这个问题。你的指导方针和解释非常清晰易懂。Enjo your weekend:)请不要同时发布多个问题。你的问题只涉及一个问题,而涉及第二个问题。
var z = Input.GetAxis("Vertical") * Time.deltaTime * 15f; // playerWalk()
var z = Input.GetAxis("Vertical") * Time.deltaTime * 5f; // backwardMotion()
void playerWalk()
{
    var x = Input.GetAxis("Horizontal") * Time.deltaTime * 75f;
    var z = Input.GetAxis("Vertical") * Time.deltaTime * 15f;

    if (Input.GetKeyDown(KeyCode.S))
    {
        // If "S" is pressed, the z speed would be reduced to 5f.
        z = Input.GetAxis("Vertical") * Time.deltaTime * 5f; 
    }

    transform.Rotate(0, x, 0);
    transform.Translate(0, 0, -z);
}
if (Input.GetKeyUp(KeyCode.S)) // Detects a release of "S" key
{
    if (backlights && backlights2 && backlights3 && backlights4)
    {
        backlights.enabled = false;
        backlights2.enabled = false;
        backlights3.enabled = false;
        backlights4.enabled = false;
    }
}