- Home /
 
Referencing a prefab in another prefab created programmatically
Howdy,
I'm currently trying to streamline part of my workflow of creating a slightly altered duplicate of a number of prefabs. The prefabs i have created manually contain a structure component script with an enum along with a few transforms as shown below: 
I also have a 'structure component silhouette' script which should reference it's corresponding structure component 
Via a button added in an editor script in a separate gameobject, a script grabs all prefabs in a given directory, and for each prefab does the following:
instantiate a copy of the prefab
remove the structure component script
add a 'Structure component silhouette' script
Set the pivots of the silhouette script (working)
Set the Comp reference to be the source prefab GameObject (not working)
Save the new object to a given directory (working)
The essence of my question is, what am i doing wrong here, i could go and drag and drop the existing structure component prefab into the new silhouette prefab, but i cannot seem to get it to stick programmatically. Code for this process shown below:
 public class StructureComponentGenerator : MonoBehaviour
 {
     private List<GameObject> SilhouettesToCreate;
     public string LoadFromPath;
     public string SaveToPath;
 
     public void GenerateSilhouettes()
     {
         SilhouettesToCreate = new List<GameObject>();
         var entries = Directory.GetFiles(LoadFromPath);
 
         foreach(var entry in entries)
         {
             if (entry.EndsWith(".prefab"))
             {
                 Debug.Log(entry);
                 SilhouettesToCreate.Add(PrefabUtility.LoadPrefabContents(entry));
             }
         }
 
         foreach(GameObject go in SilhouettesToCreate)
         {
             var sc = go.GetComponent<StructureComponent>();
 
             var silhouette = Instantiate(go);
             DestroyImmediate(silhouette.GetComponent<StructureComponent>());
 
             var scs = silhouette.AddComponent<StructureComponentSilhouette>();
 
             scs.componentType = sc.componentType;
             silhouette.name = sc.name + "_S";
             silhouette.name = silhouette.name.Substring(silhouette.name.LastIndexOf(@"\"), silhouette.name.Length - silhouette.name.LastIndexOf(@"\"));
 
             Debug.Log(silhouette.name);
 
             scs.pivots = new List<Transform>();
             foreach(Transform t in silhouette.GetComponentsInChildren<Transform>())
             {
                 scs.pivots.Add(t);
             }
 
             scs.comp = go;
 
        
             PrefabUtility.SaveAsPrefabAsset(silhouette, SaveToPath + @"\" + silhouette.name + ".prefab", out var success);
             if (success)
             {
                 Debug.Log($"Successfully created prefab at {SaveToPath + @"\" + silhouette.name + ".prefab"}");
             }
             else
             {
                 Debug.Log($"Failed to create prefab");
 
             }
 
             DestroyImmediate(silhouette);
         }
     }
 }
 
               the problem here seems to be the scs.comp = go; but i cannot figure out why that is not working. Any help would be appreciated.
Your answer
 
             Follow this Question
Related Questions
Hiding gameobjects in hierarchy make it less expensive ? 0 Answers
Cant See More Than Two Levels Of Children In The Project Tab 1 Answer
How to make sure editor completed refreshing before running other codes? 1 Answer
Mark gameobject field as changed from prefab 2 Answers
Prefab mode doesn't show prefab, still shows old scene. 7 Answers