So I've been looking for a while on how to make Random.Range never the same number. And i can't seem to figure it out. can anyone help me figure this out? I don't know if it will be helpful, but here's the code i am currently trying to run. Code (CSharp): public class GlowColorz : MonoBehaviour { void Start () { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255f, 0f, 0f, 255f); } void OnTriggerEnter ( Collider info ){ if (info.name == "Player") { var p= Random.Range (1,8); Debug.Log (p); if (p == 1f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 255.0f, 0f, 255.0f); } if (p == 2f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 0f, 255.0f, 255f); } if (p ==3f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 0f, 0f, 255.0f); } if (p == 4f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(0f, 255.0f, 255.0f, 255.0f); } if (p == 5f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 150.0f, 0f, 255.0f); } if (p == 6f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(0f, 255.0f, 0f, 255f); } if (p == 7f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(0f, 0f, 255f, 255f); } } } } If anyone has tips, or answers it would be greatly appreciated.
is p meant to be an int or a float? var is untyped (*hisses*) and you're using the integer version of Random.Range(...), but your if statements are all floats also, might want to lookup switch statements (https://unity3d.com/learn/tutorials/modules/beginner/scripting/switch) if you really only want "no two integers the same in a row", store the previous value in a manager class or static variable of some sort and do Code (csharp): do { p = Random.Range(0, 8); } while(p == storedValue)
Check here also, "How to not pick same object from array twice in a row" http://forum.unity3d.com/threads/ho...rom-array-twice-in-a-row.298546/#post-1966441
Random will always give repeats, that's just the nature of randomness I'd suggest a tetris 'bag', if you want one of each created before a duplicate (you might still get 2 in a row) http://tetris.wikia.com/wiki/Random_Generator
kind of implemented your Idea but in a way that made sense to me Code (CSharp): public class GlowColorz : MonoBehaviour { public int endNum; void Start () { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255f, 0f, 0f, 255f); } void OnTriggerEnter ( Collider info ){ if (info.name == "Player") { var p= Random.Range (1,7); while(p==endNum) { p= Random.Range (1, 7); } endNum = p; if (p == 1f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 255.0f, 0f, 255.0f); } if (p == 2f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 0f, 255.0f, 255f); } if (p ==3f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(255.0f, 0f, 0f, 255.0f); } if (p == 4f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(0f, 255.0f, 255.0f, 255.0f); } if (p == 5f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(0f, 255.0f, 0f, 255f); } if (p == 6f) { SpriteRenderer renderer = GetComponent<SpriteRenderer>(); renderer.color = new Color(0f, 0f, 255f, 255f); } } } }
Store each number you get on a list. If the number you get it's on the least, repeat random. Else, store it.