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 );
}
}
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)
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.