#c# #unity3d
Вопрос:
Поэтому я использую unity и хочу, чтобы мой объект занимал высоту до тех пор, пока игрок нажимает пробел
Но сейчас он просто прыгает, и вам нужно освободить место, чтобы он улетел
Кто-нибудь может мне помочь ?
private Rigidbody2D rb;
public float Speed;
private bool spacePressed;
public float jetForce;
pivate void Start()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
spacePressed = true;
}
else
{
spacePressed = false;
}
Move();
Jet();
}
private void Move()
{
float x = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(Speed * x, rb.velocity.y);
}
private void Jet()
{
while (spacePressed == true)
{
rb.velocity = new Vector2(rb.velocity.x, jetForce);
}
}
Ответ №1:
Input.GetKeyDown
это верно только в одном кадре, где кнопка была нажата.
Возвращает значение true во время кадра, когда пользователь начинает нажимать клавишу, определенную ключевым
KeyCode enum
параметром.
То, что вы ищете Input.GetKey
, верно для каждого кадра, пока кнопка остается нажатой.
Возвращает значение true, пока пользователь удерживает клавишу, определенную
KeyCode
параметром перечисления ключей.
Далее вы определенно не хотите while
, чтобы там была петля! Внутри цикла значение spacePressed
никогда не изменится => бесконечный цикл =>> сбой приложения!
Вы скорее просто хотите сделать
// Do continuous physics based things in FixedUpdate, not in Update!
// if there WAS any single event based user input then yes, do it in Update with a field for it
// later handle it in FixedUpdate (not the case here though since there are now only two continuous inputs)
private void FixedUpdate()
{
Move();
Jet();
}
private void Move()
{
var velocity = rb.velocity;
velocity.x = Input.GetAxis("Horizontal") * Speed;
rb.velocity = velocity;
}
private void Jet()
{
// since this method is anyway already called every physics frame
// there is no need for
// - a while loop here
// - getting this now continuous user input in Update
if(Input.GetKey(KeyCode.Space))
{
rb.velocity = new Vector2(rb.velocity.x, jetForce);
}
}
Комментарии:
1. большое вам спасибо (: