Не работает прыжок в юнити
Я делаю скрипт по туториалу и у меня получился такой скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rigb;
public float leftright=500f;
public float speed=100f;
public float highjump=15f;
protected bool left=false;
protected bool right=false;
protected bool jump=false;
// Update is called once per frame
void Update()
{
left=Input.GetKey("a");
right=Input.GetKey("d");
jump=Input.GetKeyDown("space");
if (transform.position.y<-5f)
{
Debug.Log("Конец игры");
}
}
void FixedUpdate(){
rigb.AddForce(0,0,speed*Time.deltaTime);
if (left){
rigb.AddForce(-leftright*Time.deltaTime,0,0,ForceMode.VelocityChange);
}
if (right){
rigb.AddForce(leftright*Time.deltaTime,0,0,ForceMode.VelocityChange);
}
if (jump){
rigb.AddForce(Vector3.up*highjump,ForceMode.Impulse);
jump=false;
}
}
}
}
Я все подключил в блоку но когда я нажимаю на пробел он не прыгает! Только может иногда! Помогите пожалуйста.
Ответы (1 шт):
Автор решения: Dellivi
→ Ссылка
Переменная jump = false, поэтому ты и не можешь прыгать, и устанавливает значение false, и не меняет его обратно когда игрок "приземлился". Получается так, что когда ты прыгаешь, ты меняешь значение и больше не можешь прыгать.
if (jump)
{
rigb.AddForce(Vector3.up*highjump,ForceMode.Impulse);
jump=false;
}
Меняй значение на true когда объект будет "на земле".
Что-то типо такого:
if (jump)
{
rigb.AddForce(Vector3.up*highjump,ForceMode.Impulse);
jump=false;
}
else if(!jump && transform.position.y == groundPosY)
{
jump = true;
}