I have created a script which instantiates one of game objects from an array when it starts. It turns out the GameObject that is put into the array is a self-reference, even if it’s configured using Inspector on the Prefab from the Project tree.
At runtime this results in cloning the GameObject from the Hierarchy, instead of the GameObject from the Project.
Here’s a script that illustrates the problem (just create an empty GameObject and add this script to it, turn it to a prefab, and configure the prefab so that Branches array contains the prefab you have just created).
using System.Linq;
using UnityEngine;
using System.Collections;
public class CloneRelated : MonoBehaviour
{
public GameObject[] Related;
private static int counter;
void Start()
{
if (counter++ < 2)
{
Debug.Log("Starting: " + name);
if (Related.Any(branch => branch.name.Contains("(Clone)")))
{
Debug.LogError("Error");
}
else
{
GameObject.Instantiate(Related[Random.Range(0, Related.Length)]);
}
}
}
}
Is there a way to tell Unity that I don’t want a self-reference but a reference to the Prefab in the Project? Or is there an alternative approach I could try, if I don’t want to keep cloning the cloned object, but always the original?
This is a good idea. It will also allow flexible configuration of the prefabs on a per-scene basis, if needed. Thank you!
– vigridIf Unity can't access the project folder at runtime, how comes it is able to create objects from prefabs that are not placed in the scene ?
– Estecka