- Home /
 
Rigidbody2D.velocity affects the y-axis, but not the x-axis.
I have it set to add velocity to my player whenever I contact a damaging surface, yet only the y-value is changed (the x-value of the player isn't locked). How come this is happening?
 using UnityEngine;
 
 public class Damage : MonoBehaviour
 {
     public HealthManager HPscript;
     private Rigidbody2D rb;
     public float xKnockback;
     public float yKnockback;
     void Start()
     {
         GameObject HPmgr = GameObject.Find("HealthManager");
         HPscript = HPmgr.GetComponent<HealthManager>();
         rb = gameObject.GetComponent<Rigidbody2D>();
     }
 
     void OnCollisionEnter2D(Collision2D other)
     {
         string tag = other.gameObject.tag;
         if (tag == "one")
         {
             HPscript.currentHP -= 1;
             rb.velocity = new Vector2(xKnockback, yKnockback);
         }
     }
 
 
 }
 
 
 
              
               Comment
              
 
               
              Answer by wesleyos · Mar 29, 2020 at 11:12 AM
Well, since I can't see the code which you are using to move the player, I can't say much. But probably what is happening is that you're somewhere in it setting the x velocity every frame. So for example, you have something like:
 rb2d.velocity = new Vector2(userVelocity, rb2d.velocity.y);
 
               That is run every frame in FixedUpdate/Update. If so, you're basically locking the X movement.
Hi @gazer500! Do you $$anonymous$$d sharing how you resolved this?
Your answer