- Home /
Are there better ways to create random behavior?
Hello,
I'm just getting my feet wet with Unity and following some tutorials to get a grasp of the basics. I'm currently coding a "ball" object to start at random. I've successfully done so but was wondering if there is a better or more concise code to achieve the same effect or even better randomize the object's behavior. The current code:
 function GoBall () {
     var randomNumber = Random.Range(0, 14);
     if (randomNumber <= 0.5) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, 10));
     }
     else if (randomNumber <= 1) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, 60));
     }
     else if (randomNumber <= 2) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, -60));
     }
     else if (randomNumber <= 3) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, 30));
     }
     else if (randomNumber <= 4) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, -30));
     }
     else if (randomNumber <= 5) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, 20));
     }
     else if (randomNumber <= 6) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, -20));
     }    
     else if (randomNumber <= 7) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, 10));
     }
     else if (randomNumber <= 8) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, 60));
     }
     else if (randomNumber <= 9) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, -60));
     }
     else if (randomNumber <= 10) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, -30));
     }
     else if (randomNumber <= 11) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, 30));
     }
     else if (randomNumber <= 12) {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, 20));
     }
     else if (randomNumber <= 13) {
         rigidbody2D.AddForce (new Vector2 (ballSpeed, -20));
     }
     else {
         rigidbody2D.AddForce (new Vector2 (-ballSpeed, -10));
     }
     
Thanks for any help!
Answer by robertbu · May 03, 2014 at 06:13 PM
If you want a random direction and speed, you can do:
  rigidbody2D.AddForce(Random.InsideUnitCircle * maxSpeed);
If you want a random direction and fixed speed you can do:
 rigidbody2D.AddForce(Random.InsideUnitCircle.normalized * ballSpeed);
Note that Random.Range() using integers is exclusive of the final value, so Random.Range(0, 14) produces the values 0 through 13, but not 14. It also only produces integers. This means that your final 'else' would never be executed. For what you are doing, use the floating point version:
 var randomNumber = Random.Range(0.0, 14.0);
This will produce the full range of values.
If you want these specific values but different/simpler code, you's either have to 1) find a pattern, 2) put the values in an array, or 3) use some sort of curve to fit the values.
Your answer
 
 
             Follow this Question
Related Questions
How do i tell what gameobject im on 1 Answer
Random.Range doesnt work anymore 4 Answers
Randomize 2 clips from an AudioSource List by name? 1 Answer
Putting answer randomly in options 1 Answer
Random.Range is not changing? 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                