为什么我的代码不能统一运行?统一C#
由于某种原因,我的代码不起作用。。。我不知道为什么。有人能帮忙吗?我正在使用switch语句控制我的代码:为什么我的代码不能统一运行?统一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 () { } //
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而不是用于检测输入的开关。什么是“不工作”的意思?有错误吗?例外情况?意外行为?什么是“不工作”?有错误吗?例外情况?意外行为?