- Home /
Sort array of GameObjects for a Building System.
Hello im making a building system where i have a prefab of a house and the child gameObjects of this prefab are the parts of the house(walls, floor, roof). So in the inspector i disable all of this child objects, and when the player instanciate the house the child gameObjects will be enable every 5 seconds, to make look like the house is being built. The problem its i want to sort the array so that the first child gameObjects being activated will be the floor, then the walls, and them the roof. There is someway where i can ckeck the names of the childs and them sort them by that name.
public class AutomaticBuild : MonoBehaviour {
private GameObject[] m_gameObjects;
void Start ()
{
m_gameObjects = new GameObject[transform.childCount];
for (int i = 0; i < transform.childCount - 1; i++)
{
m_gameObjects[i] = transform.GetChild(i).gameObject;
}
}
void Update ()
{
for (int i = 0; i < m_gameObjects.Length; i++)
{
timeLeft -= Time.deltaTime;
if (timeLeft < 0)
{
m_gameObjects[i].gameObject.SetActive(true);
timeLeft = 5.0f;
}
}
}
}
Answer by Xarbrough · Nov 12, 2017 at 04:57 PM
Why don't you sort the children manually in the hierarchy? Sorting by name sounds like you would have to prefix them with a number or letter anyway. Other than that your timer code doesn't look correct. I would imagine something like this:
public class AutomaticBuild : MonoBehaviour
{
public float stepDuration = 5f;
private float timer;
private int currentBuildStep;
private int stepCount;
void Start()
{
timer = stepDuration;
stepCount = transform.childCount;
currentBuildStep = 0;
}
void Update()
{
if(timer <= 0 && currentBuildStep < stepCount)
{
timer = stepDuration;
NextBuildStep();
}
timer -= timer.deltaTime;
}
void NextBuildStep()
{
transform.GetChild(currentBuildStep).gameObject.SetActive(true);
currentBuildStep += 1;
}
}
Every 5 seconds I activate the next building piece. As I said, this assumes a sorted hierarchy and might need some more setup and error checking.
As for sorting in general you can look for the System.Array.Sort method (also see Sort Examples -DotNetPerls. Alternatively, by importing System.Linq, you can use the OrderBy or OrderByAscending methods on the generic List type.
Your answer
Follow this Question
Related Questions
Change an objects Array position dynamiclly in a match 3 game 0 Answers
How to arrange list 3 Answers
Show Top 10 Of 1 GameType 2 Answers
Sorting an array - C# 3 Answers
Is it possible to sort arrays based upon a previous sort? 2 Answers