Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

621
Views
Unity 2D: Rigidbody2D 'addforce' works vertically but not horizontally?

EDIT! So I loaded up a FRESH PROJECT, created a circle and added my script to it. When I hit start the circle launches off at a 45 degree angle, it works perfectly fine. I also tried adding a horizontal addforce on another object in my original project and it resulted in a jittery teleport to the right.

Something is broken inside my project related to horizontal force... What could it be?!

This has driven me and a bud mad for 24 hours now and I've searched high and low but have not found any similar problems or applicable solutions.

I'm developing a mario-style side scroller game and the concept is simple: Hit the box, a coin pops out with vertical and horizontal force. This is the ONLY code so far in the script attached to the coin.

void Start()
{
 forceUp = new Vector2(0, upForce);
 forceSide = new Vector2(sideForce, 0);
 GetComponent<Rigidbody2D>().AddForce(forceUp, ForceMode2D.Impulse);
 GetComponent<Rigidbody2D>().AddForce(forceSide, ForceMode2D.Impulse);
}

This is the code that instantiates the coin in the box script:

private void OnCollisionEnter2D(Collision2D collision)
 
{
 RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, 1.0f, layerMask);
 
 if (!isOpen && hit.collider != null)
 {
     isOpened();
     Instantiate(openPrize, new Vector3(transform.position.x, transform.position.y+1.0f, transform.position.z), transform.rotation);
 }
}

problem is: The coin will pop "up" a distance directly related to the value I plug into the "up force" variable.

The coin will not move horizontally at all. If I jack the horizontal variable up to some stupid number like 5000, it will teleport a short distance to the side.

the animator of the prefab has "Apply root motion" enabled.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

I figured it out... There is a setting in the animator of the prefab im using called "Apply root motion". I have never used it, dunno what it does but it was checked by default in the asset i imported and that was somehow stopping the movement. Thanks for your help!

over 4 years ago · Santiago Trujillo Report

0

I think your forcemode is probably not right.

Docs:

Apply the impulse force instantly. [...] This mode is useful for applying forces that happen instantly, such as forces from explosions or collisions.

Probabaly ForceMode2D.Force is better.

This mode is useful for setting up realistic physics where it takes more force to move heavier objects.

But maybe it's because you apply to forces at once. Try this:

// Force up
await Task.Delay(TimeSpan.FromSeconds(1));
// Force side
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!