Is there a more efficiant way of randomly generating directions?
My game involves the player flying a spaceship through rings. When the player flies through a ring, a new group of rings are spawned - 4 of them trigger a game over and one will generate new rings, with a random one being the one the player has to go through.
So far I've handled the random generation by using a switch statement, but I'm having to use lots of if else statements to determine how the next set of rings are spawned - mainly the rotation. Here's a quick example
switch (rand)
{
case 0: //straight ahead
{
// max left/right, no vert
if (vertCount == 0 && (count == -2 || count == 2))
{
centreText.GetComponent<Text>().enabled = true;
StartCoroutine(killTextCentre());
newPosition = (thisPosition + new Vector3(0, 0, 0));
Instantiate(centreTrack, newPosition, Quaternion.Euler(0, 180, 0));
Debug.Log("case " + rand);
camera.GetComponent<randRemember>().giveRand(rand);
return;
}
// max left/right, going up
else if (vertCount == 1 && (count == -2 || count == 2))
{
centreText.GetComponent<Text>().enabled = true;
StartCoroutine(killTextCentre());
newPosition = (thisPosition + new Vector3(0, 0, 0));
Instantiate(centreTrack, newPosition, Quaternion.Euler(-45, 180, 0));
Debug.Log("case " + rand);
camera.GetComponent<randRemember>().giveRand(rand);
return;
}
// max left/right, going down
else if (vertCount == -1 && (count == -2 || count == 2))
{
centreText.GetComponent<Text>().enabled = true;
StartCoroutine(killTextCentre());
newPosition = (thisPosition + new Vector3(0, 0, 0));
Instantiate(centreTrack, newPosition, Quaternion.Euler(45, 180, 0));
Debug.Log("case " + rand);
camera.GetComponent<randRemember>().giveRand(rand);
return;
}
// going right
else if (count == 1 && vertCount == 0)
{
centreText.GetComponent<Text>().enabled = true;
StartCoroutine(killTextCentre());
newPosition = (thisPosition + new Vector3(0, 0, 0));
Instantiate(centreTrack, newPosition, Quaternion.Euler(0, 90, 0));
Debug.Log("case " + rand);
camera.GetComponent<randRemember>().giveRand(rand);
return;
}
// going right and up
else if (count == 1 && vertCount == 1)
{
centreText.GetComponent<Text>().enabled = true;
StartCoroutine(killTextCentre());
newPosition = (thisPosition + new Vector3(0, 0, 0));
Instantiate(centreTrack, newPosition, Quaternion.Euler(-45, 90, 0));
Debug.Log("case " + rand);
camera.GetComponent<randRemember>().giveRand(rand);
return;
}
count is there to keep track of what direction the player is going in i.e. left or right, and vertCount does the same for up and down.
Someone just told me that there's likely to be a more efficiant way of doing this (which makes a lot of sense really). Is there a more efficiant way of doing this with less code?
Your answer
![](https://koobas.hobune.stream/wayback/20220612125415im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Rotation script isn't working 1 Answer
How does CollisionFlags work? 0 Answers
[SOLVED]My OnMuseDown execute only once 1 Answer
First person shooter : Leaning! 2 Answers