Переменная не уменьшается правильноC#

Место общения программистов C#
Anonymous
Переменная не уменьшается правильно

Сообщение Anonymous »

Я пытаюсь написать сценарий для Unity, который позволит моему персонажу прыгать. Я настроил это так: есть переменная, в которой хранится количество прыжков, которое осталось у персонажа. При нажатии кнопки перехода, если эта переменная больше нуля, код применяет вертикальную силу к символу, а затем должен уменьшить переменную на единицу. В конце тика, если персонаж касается земли, количество прыжков будет сброшено до исходного количества прыжков, которое в данном случае равно 1. Однако по какой-то причине переменная, хранящая количество прыжков, не как следует уменьшить. По какой-то причине в первый раз, когда персонаж прыгает после касания земли, переменная не уменьшается должным образом и остается равной 1. Однако во время того же прыжка, если перед касанием земли снова нажать клавишу прыжка, персонаж прыгнет. в воздухе, но на этот раз все ведет себя правильно, и счетчик прыжков остается на нуле, пока персонаж снова не коснется земли. Это происходит только тогда, когда количество прыжков установлено равным одному. Если установлено значение два или выше, все работает нормально.
Вот мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BodyMovement : MonoBehaviour
{
Rigidbody rb;
public float jumpHeight = 10;
public int jumpNum = 1;
public float speed = 10;
int jumpCount = 1;
bool updateRunning = false;
bool touchingGround = false;
// Start is called before the first frame update
void Start()
{
rb = GetComponent();
}

// Update is called once per frame
void Update()
{
if(updateRunning==false){
updateRunning = true;
touchingGround = Physics.Raycast(transform.position,Vector3.down,1);
if(Input.GetKey(KeyCode.D)){
// Debug.Log("zPressed");
rb.velocity = new Vector3(speed,rb.velocity.y,0);

}else if(Input.GetKey(KeyCode.A)){
rb.velocity = new Vector3(-speed,rb.velocity.y,0);

}else if(touchingGround){
rb.velocity = new Vector3(0,rb.velocity.y,0);
}
if(Input.GetKeyDown(KeyCode.W) && jumpCount > 0){

touchingGround=false;
rb.AddForce(new Vector3(0,jumpHeight,0),ForceMode.VelocityChange);
// touchingGround = Physics.Raycast(transform.position,Vector3.down,1);
jumpCount = jumpCount - 1;
Debug.Log(jumpCount);
}

if(touchingGround){
jumpCount = jumpNum;
// Debug.Log("touching ground");

}
Debug.Log($"Jumpcount:{jumpCount} TouchingGround:{touchingGround}" );
updateRunning = false;
}
}

}



Подробнее здесь: https://stackoverflow.com/questions/790 ... -correctly

Вернуться в «C#»