Question by
RoyaltyMisha · Mar 01, 2018 at 08:42 AM ·
instantiaterandom.range
Random.Range does not work in the specified range
Hi, I found a bug. For some reason when i try to use min and max value for Random.Range it's dosn't work correct. If I set the minimum value of 10, can fall 2 for example. I found that Random.Range does not work correctly with int and need to use float. But it does not help.
Thank you!

using Random = UnityEngine.Random;
using System.Collections.Generic;
using System;
using UnityEngine;
public class LevelCreator : MonoBehaviour {
[Serializable]
public class Count
{
public float minimum;
public float maximum;
public Count (float min, float max)
{
minimum = min;
maximum = max;
}
}
public Vector3 offset;
public int columns;
public int rows;
public Count volumeObject = new Count (16, 32);
public GameObject[] innerQuad;
public GameObject[] outerQuad;
public GameObject[] object3D;
private List <Vector3> gridPosition = new List <Vector3> ();
void Start ()
{
LevelSetup ();
InitialiseList ();
LayoutObjectAtRandom (object3D, volumeObject.minimum, volumeObject.maximum);
}
void InitialiseList()
{
gridPosition.Clear ();
for (int x = 1; x < columns -1; x++)
{
for (int y = 1; y < rows - 1; y++)
{
gridPosition.Add (new Vector3 (x, y, 0f));
}
}
}
void LevelSetup()
{
for (int x = -1; x < columns + 1; x++)
{
for (int y = -1; y < rows + 1; y++)
{
GameObject toInstantiate = innerQuad [Random.Range(0, innerQuad.Length)];
if (x == -1 || x == columns || y == -1 || y == rows)
{
toInstantiate = outerQuad [Random.Range(0, outerQuad.Length)];
}
Instantiate (toInstantiate, new Vector3 (x, y, 0f), Quaternion.identity);
}
}
}
Vector3 RandomPosition()
{
int randomIndex = Random.Range (0, gridPosition.Count);
Vector3 randomPosition = gridPosition [randomIndex];
gridPosition.RemoveAt (randomIndex);
return randomPosition;
}
void LayoutObjectAtRandom (GameObject[] tileArray, float minimum, float maximum)
{
float objectCount = Random.Range (minimum, maximum + 1);
for (float i = 0; i < objectCount; i++)
{
Vector3 randomPosition = RandomPosition ();
GameObject randomObject3D = tileArray [Random.Range (0, tileArray.Length)];
Instantiate (randomObject3D, randomPosition + offset, Quaternion.identity);
}
}
}
example.png
(369.7 kB)
Comment
Your answer
Follow this Question
Related Questions
local scale not working? 2 Answers
Random.range game object destroying itself before reaching destroy position.Please help. 1 Answer
Instaniate not working with Random.Range 1 Answer
C# Instantiate multiple objects at unique positions within a set range 1 Answer
Random position of asteroids -- Random not randomizing? 1 Answer