mavericks
mavericks

Reputation: 115

Unity ball with constant speed

I'm making 2D mobile game and I have a ball, but my ball doesn't have a constant moving speed. What I need to do? When I build game on my android device, ball have a various speed. In that case, my game is not playable.

I hope that someone can help me. Thanks.

This is on my start function:

void Start () {
    GetComponent<Rigidbody2D> ()
        .AddForce (new Vector2 (1f, 0.5f)* Time.deltaTime * force);
}

Is it a good practice if I used in code " Application.LoadLevel ("__Scena_0"); " to load existing scene when I lose " life" ? Problem happens when I lost " life " and try playing game in second chance.

My update function is about OnTriggerEnter2D when my ball hit trigger objects.

EDIT 23.12.2015. : problem solve with adding physics material (fiction 0) and adding to script:

using UnityEngine.SceneManagement;
...
SceneManager.LoadScene ("MainScene");

Upvotes: 1

Views: 1943

Answers (3)

Hamza Hasan
Hamza Hasan

Reputation: 1359

Assuming that your ball and colliding walls have bouncy materials with no friction. Try

public float _ballSpeed = 2.5f;
Rigidbody2D _rb;

void Start()
{
    _rb = GetComponent<Rigidbody2D>();
    _rb.velocity = Vector2.one * _ballSpeed;
}
void Update()
{

}

From this you can control ball speed through _ballSpeed

//========== OR ==========//

If you want to retain speed even after ball destruction.

Retain _ballSpeed in any global static variable.

Suppose you have a class named Globals, declare a variable like,

public class Globals
{
    public static float BALL_SPEED = 2.5f;
}

Now in Ball Script

Rigidbody2D _rb;

void Start()
{
    _rb = GetComponent<Rigidbody2D>();
    _rb.velocity = Vector2.one * Globals.BALL_SPEED;
}
void Update()
{

}

Upvotes: 0

Thomas Hilbert
Thomas Hilbert

Reputation: 3629

The problem is the calculation of the force vector:

new Vector2 (1f, 0.5f) * Time.deltaTime * force

You are using Time.deltaTime as a factor, which means that the applied force is not constant, but depending on the deltaTime, which is the duration of the last frame. This explains why it changes randomly.

I don't think Time.deltaTime is what you want here, try just removing the factor and adjusting the "force" factor accordingly. You should now have a constant force applied, independent from the platform you play on.

Upvotes: 1

kagkar
kagkar

Reputation: 469

Create a new Physics Material, set friction zero and add it to your object. If your object has no friction, its speed cannot be decreased. Then, use AddForce() on Rigidbody2D to speed up.

Upvotes: 1

Related Questions