- Home /
Portal has multiple random exit choices, but player keeps ending up at the same place,Portal exit is not random despite array
So I have created a portal that has a few random exits, but the player keeps going out through the same exit, and warning cs0649 is in the console. Can someone explain what I am doing wrong?
Many thanks.
This is my script: public class S1PortalExitS1 : MonoBehaviour { public Vector3[] positions; int rn;
void Start ()
{
int rn = Random.Range(0, positions.Length);
}
void OnTriggerEnter (Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
other.gameObject.transform.position = positions[rn];
}
},
Answer by Bunny83 · Nov 17, 2019 at 12:51 PM
It's not really clear what exact behaviour you want. Do you want to go to a different exit each time the player enters a portal? Or do you want this portal to just have a random exit which should be choosen at the start and stay to that exit for the current game?
Your first obvious error is that you re-declared your "rn" variable inside the Start method. So your class variable "rn" and the "rn" variable inside Start are two seperate variables. Therefore you never assigned a value to your member variable. To fix this you just have to remove the "int" before your rn inside Start.
If you fixed the first error your script will now pick a random target at the game start which will stay until you close / stop your game and restart it. If you want to pick a random exit each time you enter the portal, you should just remove the rn member variable as well se your Start method and move the Random.Range call inside OnTriggerEnter.
To sum up:
If you want pick a random portal once and keep it, do this:
// [...]
int rn;
void Awake()
{
rn = Random.Range(0, positions.Length);
}
// [...]
If you want a random exit each time you enter the portal, use this:
// [...]
void OnTriggerEnter (Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
int rn = Random.Range(0, positions.Length);
other.gameObject.transform.position = positions[rn];
}
}
// [...]
Your answer
Follow this Question
Related Questions
Occlusion Portal: Invalid Portal index 1 Answer
Swaping Certain Items For Another In An Inventory 0 Answers
Portal between scenes? 3 Answers
My bullets fly same direction no matter wich way I turn player c#. 3 Answers
How to stop multiples of game objects instantiating when using random.range with an array 1 Answer