为什么我的代码不能统一运行?统一C#

为什么我的代码不能统一运行?统一C#,c#,unity3d,scripting,C#,Unity3d,Scripting,由于某种原因,我的代码不起作用。。。我不知道为什么。有人能帮忙吗?我正在使用switch语句控制我的代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMovement : MonoBehaviour { // Use this for initialization void Start () { } //

由于某种原因,我的代码不起作用。。。我不知道为什么。有人能帮忙吗?我正在使用switch语句控制我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        Vector3 pos = transform.position;
        string state = "idle";
        float vx = 0f;
        float vy = 0f;
        float playerSpeed = 2f * Time.deltaTime;

        switch (state) {
            case "idle": 
                vx = 0;
                vy = 0;

                if (Input.GetKey (KeyCode.A)) state = "left";
                if (Input.GetKey (KeyCode.D)) state = "right";
                if (!Input.GetKey (KeyCode.D) && !Input.GetKey (KeyCode.A)) state = "idle";             
                break;

            case "left":
                vx = -1 * playerSpeed;
                vy = 0;

                if (Input.GetKey (KeyCode.A)) state = "left";
                if (Input.GetKey (KeyCode.D)) state = "right";
                if (!Input.GetKey (KeyCode.D) && !Input.GetKey (KeyCode.A)) state = "idle";             
                break;

            case "right":
                vx = playerSpeed;
                vy = 0;

                if (Input.GetKey (KeyCode.A)) state = "left";
                if (Input.GetKey (KeyCode.D)) state = "right";
                if (!Input.GetKey (KeyCode.D) && !Input.GetKey (KeyCode.A)) state = "idle";             
                break;
        }
        vx += pos.x;
        vy += pos.y;
        pos += transform.position;

    }
}
控制台没有错误,我看不到我的代码有任何错误

请帮忙

非常感谢您的回答


谢谢。

您正在评估每个开关案例中的输入,而不是在评估开关之前。您也在检查输入,然后检查是否缺少输入,因此只需使用
else
来清理这些检查。除了
vy=0
之外,您什么也不做,所以不用麻烦设置:

if (Input.GetKey (KeyCode.A))
    state = "left";
else if (Input.GetKey (KeyCode.D)) // if you hold both A and D, A will get priority
    state = "right";
else
    state = "idle";
switch(state)
{
    case("idle")
        vx = 0;
        break;
    case("left")
        vx = playerSpeed;
        break;
    case("right")
        vx = -1 * playerSpeed;
        break;
}
您也没有正确地将值添加到变换的位置,您只是将它们添加到临时变量,
pos
(一个您根本不需要的变量):

应改为:

transform.position.Translate(vx, vy, 0);


我还想指出的是,开关本身是完全没有意义的,但我做了这个我的答案,所以很清楚是什么做错了;您应该在
if
/
else if
/
else
语句中设置
vx
值。

您在每个开关情况下评估输入,而不是在评估开关之前。您也在检查输入,然后检查是否缺少输入,因此只需使用
else
来清理这些检查。除了
vy=0
之外,您什么也不做,所以不用麻烦设置:

if (Input.GetKey (KeyCode.A))
    state = "left";
else if (Input.GetKey (KeyCode.D)) // if you hold both A and D, A will get priority
    state = "right";
else
    state = "idle";
switch(state)
{
    case("idle")
        vx = 0;
        break;
    case("left")
        vx = playerSpeed;
        break;
    case("right")
        vx = -1 * playerSpeed;
        break;
}
您也没有正确地将值添加到变换的位置,您只是将它们添加到临时变量,
pos
(一个您根本不需要的变量):

应改为:

transform.position.Translate(vx, vy, 0);

我还想指出的是,开关本身是完全没有意义的,但我做了这个我的答案,所以很清楚是什么做错了;你应该在
if
/
else if
/
else
语句中设置你的
vx
值。

你看,我感觉每次“状态”都被重置为“空闲”。你能试着移动
string state=“idle”吗开始()函数
然后添加此
state=“idle”其他地方,比如在

   vx += pos.x;
   vy += pos.y;
   pos += transform.position;
你看你有一个开关箱。哪一个会传递一次代码,你看到那些中断了吗?这就是为什么他们不输入或接收vx和vy上的值更改。我建议你使用If-Else而不是开关来检测输入。

你看,我感觉每次“状态”都被重置为“空闲”。你能试着移动
string state=“idle”吗开始()函数
然后添加此
state=“idle”其他地方,比如在

   vx += pos.x;
   vy += pos.y;
   pos += transform.position;
你看你有一个开关箱。哪一个会传递一次代码,你看到那些中断了吗?这就是为什么他们不输入或接收vx和vy上的值更改。我建议您只使用If Else而不是用于检测输入的开关。

什么是“不工作”的意思?有错误吗?例外情况?意外行为?什么是“不工作”?有错误吗?例外情况?意外行为?