Placing Prefabs in Prefabs.

I have a scene Hierarchy which looks like that

  • root prefab (from an empty game object)
    • architecture prefab
    • plant prefab
    • plant prefab
    • plant prefab

When I drag a new root prefab in the scene everything works fine. If I change my first plant prefab all the plant prefabs change. But I found this thread in the forum that suggests otherwise. here

Am I missing something ? I use similar hierarchies for pretty much everything in my scene so if I do something wrong It would be NO good.

///Edit/// I see what is the problem now. If I change my original mesh things will update because everything points back to the original mesh. But if I do things in unity the prefab connection is lost. hmmm i still need to create groups of geometry with prefabs for cloning in an efficient way ... I really don't want to write code for placing 30 plants, garbage bins etc in the right place.

You can't have the concept of "nested" prefabs, no.

What you could do is set up some kind of dummy gameobject/node that, on Awake(), Instantiates your desired prefab at it's current position/rotation/scale.

So each game object that's a child of your root prefab would have a script that looks something like this:

class PrefabSpawner : MonoBehaviour
{
    public GameObject prefab;

    void Awake()
    {
            GameObject go = Instantiate( prefab, transform.position, transform.rotation );
            go.transform.parent = transform.parent;
            Destroy( gameObject );
    }
} 

Maybe our last plugin may help you!
http://u3d.as/content/bento-studio/nested-prefab/2Jz

I know exactly what you want to do and I too cannot find a way to do it. :/

If I'm not mistaken you want the ability to create 'prefab links' in much the same way you get asset links. This would then allow you to have a number of objects and be able to use them individually as well as have a 'prefab links' hierarchy for common layouts etc.

You would think this would be an easy feature to add. it seems half the functionality is there with the asset linking.

Here's an example for people to help understand the problem.

I want to be able to do this (imagine this is the project view):

  • prefab1
  • prefab2
  • commonLayoutPrefab
    • prefab1
    • prefab2

Changing prefab1 or prefab2 under commonLayoutPrefab should be the same as changing prefab1 or prefab2 at the base level as the ones under commonLayoutPrefab are only links to the originals.

If you want to copy and paste sections on the scene use ctrl click on each item in the hierarchy window and then simply drag the whole lot into an empty prefab, then you can drag that prefab onto the scene as many times as you want.... I'm not sure it that's what you wanted though.

If you're looking for what I think you're looking for you can do it with the transform.parent property. I'll share a function I'm using to Instantiate hex cells in this manner.

function Cellspawn (colour, Colour) {
    cell = Instantiate(colour, pos, Quaternion.identity); //create the cell
    cell.GetComponent(tilemove).row = row; //set the row variable
    cell.GetComponent(tilemove).column = column; //set the column variable
    cell.transform.parent = this.transform.Find(Colour).transform;  //set the cells parent
    if (special ()) {
        cell.GetComponent(tilemove).special=true; //sets special flag
    }
} 

In a running instance the hierarchy tab shows the cells nested within there own colour tags, which are empty gameobjects nested within the gameobject that spawns the cells. This I have set up beforehand although the colour tags could be created at runtime. The special function is really just a huge mess of if statements and spaghetti code I didn't want to look at anymore.

If I interpret you correctly you need what I done recently.

I wanted to build in a single Prefab composed from several pieces: a bunch of grapes with 12 grapes, 2 leafs and 1 tip.

I went to the Scene and created the individual pieces, one by one (you can duplicate and rotate the grapes to change the appearance of them and also the leafs). I positioned them together to my convenience. Then went to Assets > Create > Prefab, which created a new empty prefab: I called it GrapesBunch. I shift-right-clicked each one of the objects in the Scene to have all them grouped. Then, GameObject > Make Parent. All the grouped objects formed a single entity. Drag the grouped objects from the Hierarchy windows to the new prefab icon (GrapesBunch) in the Project window. Then, I clicked on the GrapesBunch and I can swa all the parts of the prefab (each grape, each leaf, and so on)

I hope it help you.

Buy this plugin and all your problems are solved: Prefabs in Prefabs Plugin | Utilities Tools | Unity Asset Store

Wow this really surprises me. The definition of a prefab is one that you can instantiate and keep its ties to a base version of the object. I find it quite disappointing to see that this is not how it works inherently. I suppose what is really needed is the concept of a component that refers to a prefab similar to what is described above. Just needs to manage the editor version of the prefab and the runtime version separately.

some new solution about it http://forum.unity3d.com/threads/236719-Prefab-Evolution-Plugin?p=1572475#post1572475