Random.Range with Lists problem.

I have updated my question as I have narrowed out my problem. I can’t seem to be able to store a TOTAL of 4 Vector3 Positions and use Random.Range to randomly select one of them.
I previously used the Vector3 position = vectorPositionList [Random.Range (0, vectorPositionList.Count) ];

It worked sort of. When I ran the script more times than the amount of Vector3’s I had stored in the List I got an “Out of Range” error. It needs to be able to run in a loop somehow.

You are using the combination of Random.Range and List.Count correctly. When passed two integers you will get a random number between the min and max but never max because the max is exclusive. However, if you have a list with a count of 0 (an empty list), you will get an error:

List<Vector3> list = new List<Vector3>(); // An empty list
int index = Random.Range(0,list.Count); // Count will be 0
Vector3 v = list[index]; // This error

This code will throw an OutOfRangeException because count is 0 and there is no entry at index 0. To avoid this you will need to check if the list is empty (eg list.Count == 0) before getting a random entry. I hope that helps =)

I solved the problem myself. I used the typical Random.Range to create a number, and inserting it directly into an equation like this.

int randomGenerated = Random.Range (0,4);
this.selected = this.vectors [randomGenerated];

Gets the job done well, looks clear and is short. I love it! I used tw1st3d 's idea and tweaked it to make it work properly. The “.NEXT” method did not work, it threw out an error.

using UnityEngine;
using System;
using System.Collections;

public class Vector3Test : MonoBehavior
{
	private Vector3[] vectors = new Vector3[4];
	private Vector3 selected;
	
	public void Awake()
	{
		// Create your four vectors
		this.vectors[0] = new Vector3(0, 0, 1, 1);
		this.vectors[1] = new Vector3(1, 1, 0, 0);
		this.vectors[2] = new Vector3(1, 1, 1, 1);
		this.vectors[3] = new Vector3(0, 0, 0, 0);
	}
	
	public void Start()
	{
		// Generate random number
		Random rnd = new Random();
		int picked = rnd.Next(0, 3);
		// Use random number to pick the vector3
		this.selected = this.vectors[picked];
		// Log the randomly picked vector
		Debug.Log(this.selected.ToString("F3"));
		
	}
}