# if statement bug or something mystic at the core

Discussion in '2D' started by Helladah, Aug 14, 2019.

Joined:
May 5, 2018
Posts:
234
Hi, im trying to achive a random initial direction for a gameobject but while any of the statements of translate would work on his own, it dosent work with the conditions

Code (CSharp):
2.
3.         if (dado == 0) // stop
4.         {
5.             transform.Translate(0, 0, 0);
6.
7.         }else if (dado == 1) // up
8.         {
9.             transform.Translate(0, speed * Time.deltaTime, 0);
10.         }
11.         else if (dado == 2) // up-right
12.         {
13.             transform.Translate(speed * Time.deltaTime, speed * Time.deltaTime, 0);
14.         }
15.         else if (dado == 3) // down-right
16.         {
17.             transform.Translate(speed * Time.deltaTime , -speed * Time.deltaTime, 0);
18.         }
19.         else if (dado == 4) // down
20.         {
21.             transform.Translate(0, -speed * Time.deltaTime, 0);
22.         }
23.         else if (dado == 5) // right
24.         {
25.             transform.Translate(speed * Time.deltaTime, 0, 0);
26.         }
27.         else if (dado == 6) // down-left
28.         {
29.             transform.Translate(-speed * Time.deltaTime, -speed * Time.deltaTime, 0);
30.         }
31.         else if (dado == 7) //left
32.         {
33.             transform.Translate(-speed * Time.deltaTime, 0, 0);
34.         }
35.         else if (dado == 8) // left-up
36.         {
37.             transform.Translate(-speed * Time.deltaTime, speed * Time.deltaTime, 0);
38.         }
what am i doing wrong buddies?

2. ### LiterallyJeff

Joined:
Jan 21, 2015
Posts:
2,768
The way you wrote the if statements is correct, I'd suggest using a switch statement though.

How does the variable "dado" get set? What does the function "Dado()" do?

I think a nicer solution would be to randomly generate the direction rather than an index:
Code (CSharp):
1. public float speed;
2. private Vector2 direction;
3.
4. private void Start()
5. {
6.     direction = GetRandomCardinalDirection();
7. }
8.
9. private void Update()
10. {
11.     transform.Translate(direction * speed * Time.deltaTime);
12. }
13.
14. private Vector2 GetRandomCardinalDirection()
15. {
16.     // randomly choose -1, 0, or 1 for X and Y
17.     int directionX = UnityEngine.Random.Range(-1, 2);
18.     int directionY = UnityEngine.Random.Range(-1, 2);
19.
20.     return new Vector2(directionX, directionY).normalized;
21. }