- Home /
Instantiate object in random position inside a navmesh
Hi, In my game I have trees and rocks that I want to instantantiate randomly inside a navmesh, but I have no idea of how to avoid overlaying objects.
I found this code on the internet, it helps to find a position, but how do I know if the place is free? How do I avoid checking the same position?
**Vector3 randomDirection = Random.insideUnitSphere * walkRadius; randomDirection += transform.position; NavMeshHit hit; NavMesh.SamplePosition(randomDirection, out hit, walkRadius, 1);
Vector3 finalPosition = hit.position;**
Thanks for your time
Answer by SohailBukhari · May 24, 2017 at 01:28 PM
There are many ways to remove duplication while selecting random.One way is you can take a list of the numbers 1-20, shuffle them, and then grab one at a time from the head of the list.
public static void shuffleList<T>(List<T> arr)
{
for (int i = arr.Count - 1; i > 0; i--)
{
int r = Random.Range(0, i);
T tmp = arr[i];
arr[i] = arr[r];
arr[r] = tmp;
}
}
Every time you instantiate call shuffleList
and select. Second is using linq
. Random Choose the same position twice. So by avoiding this we simply use the list . Make a list of integers.
List<int> randomNumber = new List<int> ();
After making list fill the list with integers up to your target(Count of your Object to instantiate,The all gameObjects array)
void Fill_List ()
{
for (int i = 0; i < spawnArr.Count; i++) {
randomNumber.Add (i);
}
}
Now after filling the list with the integers, choose the random integer and against your integer return the desired gameObject transform. The Selected number then remove from the list then there will be no chances of duplication when you choose next position.
int RandomNumberChooser ()
{
if (randomNumber.Count == 0) {
Fill_List ();
RandomNumberChooser ();
}
var index = Random.Range (0, randomNumber.Count);
var value = randomNumber [index];
randomNumber.RemoveAt (index);
return value;
}
Now before instantiating select random number using RandomNumberChooser
method.
Your answer
Follow this Question
Related Questions
Objects Instantiate 1 Answer
How can i randomly create an array of objects without colliding one another? 1 Answer
One of the numbers as Second ? 1 Answer
Spawning different random objects at the same position? 2 Answers
Random array issue C# 2 Answers