Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.7k views
in Technique[技术] by (71.8m points)

unity3d - 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...