我想要它,这样当我按下空格时我会上升,而当我再次按下空格时我会下降等等...
public class PlayerMov : MonoBehaviour
{
public bool up;
public bool down;
public float moveSpeed;
// Start is called before the first frame update
void Start()
{
down = true;
moveSpeed = 1;
}
// Update is called once per frame
void FixedUpdate()
{
if (up == true)
{
transform.position += Vector3.up * moveSpeed * Time.deltaTime;
}
if (down == true)
{
transform.position += Vector3.down * moveSpeed * Time.deltaTime;
}
}
void Update()
{
if (Input.GetKey("space") && up == true)
{
down = true;
up = false;
}
if (Input.GetKey("space") && down == true)
{
down = false;
up = true;
}
if (down == true && up == true)
{
down = true;
}
}
}
我让它可以在前两次压机上工作,但是之后它一直在上升。谢谢您的帮助:)如果您不知道,我也是Unity的初学者。
答案 0 :(得分:0)
您实际上根本不需要2个变量。您可以将所有代码简化为:
public class PlayerMov : MonoBehaviour
{
public bool down = true;
public float moveSpeed = 1;
void Update()
{
if (Input.GetKey("space"))
{
down = !down;
}
Vector3 directionVector = (down == true) ? Vector3.down : Vector3.up;
transform.position += directionVector * moveSpeed * Time.deltaTime;
}
}
但是,如果您出于某种原因仍想保持原样-您需要这样做:
void Update()
{
if (Input.GetKey("space"))
{
if (up == true)
{
down = true;
up = false;
}
else if (down == true)
{
down = false;
up = true;
}
}
}
这部分也没有任何意义,它什么也不做:))
if (down == true && up == true)
{
down = true;
}
答案 1 :(得分:0)
您以down = true开头,并且始终具有down或up true,永远不会都是,所以您只需要一个:
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
down = !down;
}
Vector3 direction = (down == true) ? Vector3.down : Vector3.up;
transform.position += direction * moveSpeed * Time.deltaTime;
}
每当您按下Space键时,它将布尔值交换为相反的值。而且,GetKey现在是GetKeyDown,因此它只发生一次,而不是连续很多帧。