Home > other >  Jump like teleporting
Jump like teleporting

Time:10-08

I'm working on unity and am trying to give my player character a jump button however when he jump he teleport up not jumping private float speed = 10f;

private bool canjump = false;
private Rigidbody rb;
private float jump =100f;
private float movementX;
private float movementy;
public bool isJumping;
private float jumpdecay =20f; 
public float fallmultipler = 2.5f;
public float lowjumpmultiplier = 2f;
void Start()
{
  rb = GetComponent<Rigidbody>();
}

private void OnMove(InputValue movementValue) { Vector2 movementVector = movementValue.Get();

    movementX = movementVector.x;
}
private void Update()
{

   Vector3 movement = new Vector2(movementX, 0);

       rb.velocity = movement * speed;
    
       
    if (Input.GetKeyDown(KeyCode.Space)) 
       {
           canjump = true;
       }

}
void OnTriggerEnter(Collider collision)
{ 
    if(collision.gameObject.tag == "ground")
    {
        isJumping = false;
    }
}
void OnTriggerExit(Collider collision)
{
    isJumping = true;
}
private void FixedUpdate()
{ 
    if (canjump & isJumping == false)
    {
        rb.velocity = Vector3.up * jump; 
               canjump = false;
    }
}

CodePudding user response:

It's happen because on Update you change your velocity including the y and then every frame your y axis of the velocity vector become 0.

to fix that you should save your y and replace after modify your velocity.

change inside your code in the update method this:

Vector3 movement = new Vector2(movementX, 0);
rb.velocity = movement * speed;

with this:

Vector3 movement = new Vector2(movementX, 0);
float currentVelocity = rb.velocity.y;
rb.velocity = movement * speed;
rb.velocity = new Vector3(rb.velocity.x, currentVelocity, rb.velocity.z);

if it's help you, please mark this answer as the good answer, if not please let me know and I will help you.

CodePudding user response:

You are reseting the y velocity inside of update

Vector3 movement = new Vector2(movementX, 0);
rb.velocity = movement * speed;

Try someting like

rb.velocity = new Vector2(movementX * speed, rb.velocity.y)

rb.velocity.y returns current y velocity, because of that said velocity remains unchanged, allowing for the jump to work normally

  • Related