I've been thinking about it. if you want to create many objects with the same structure on the unity3d, how to do it, and then check the relevant data found that the default can solve the problem!
The concept of a pre-set: the assembly of components, prefabricated objects can be instantiated into the game Object.
Create a preset: you can repeatedly create game objects with the same structure.
.1 below to explain how to make a simple preset (up and down for the process and the result graph):
.2 Creating multiple prefabs_new (code, result diagram):
1 usingunityengine;2 usingsystem.collections;3 4 //[executeineditmode] means to run in edit mode (note that changing the properties of prefab other properties will also Change)5 public classCreateinstance:monobehaviour {6 publicGameobject prefabs =NULL;7 PrivateVector3 pos;8 voidStart () {9 if(prefabs! =NULL)Ten { onepos =NewVector3 (0,2.7f, -10.5114f); a for(inti =0; I <5; ++I) - { -Object tmpobj =Instantiate (prefabs, pos, quaternion.identity); thePos.x = pos.x-3; - } - } - Else + { -Debug.Log ("prefabs is null"); + } a } at}
If (the combination of the preset c = preset B and the preset a) will form the data that modifies the preset a will not affect the embedded data in the preset c, the following method can help solve!
. 4 about nesting between Perfab (mainly a Perfab data modified nested this PERFAB data to do the corresponding update):
The code for the preset nested presets (which will get the latest Perfab data when instantiated):
usingunityengine;#ifUnity_editorusingunityeditor;usingunityeditor.callbacks;#endifusingSystem.Collections.Generic; [executeineditmode] public classprefabinstance:monobehaviour{ publicGameobject prefab;#ifUnity_editor//Struct of all components . Used for Edit-time visualization and Gizmo drawing public structThingy { publicMesh mesh; publicmatrix4x4 matrix; publicList<material>materials; } [system.nonserializedattribute] publiclist<thingy> things =NewList<thingy> (); voidOnValidate () {things. Clear (); if(enabled) Rebuild (prefab, matrix4x4.identity); } voidonenable () {things. Clear (); if(enabled) Rebuild (prefab, matrix4x4.identity); } voidRebuild (gameobject source, matrix4x4 inmatrix) {if(!Source)return; matrix4x4 Basemat= Inmatrix * Matrix4x4.trs (-source.transform.position, quaternion.identity, vector3.one); foreach(meshrenderer MrinchSource. Getcomponentsinchildren (typeof(Renderer),true) {things. ADD (Newthingy () {mesh= Mr. Getcomponent<meshfilter>(). sharedmesh, Matrix= Basemat *mr.transform.localToWorldMatrix, Materials=NewList<material>(mr.sharedmaterials)}); } foreach(prefabinstance PiinchSource. Getcomponentsinchildren (typeof(prefabinstance),true)) { if(pi.enabled &&pi.gameObject.activeSelf) Rebuild (pi.prefab, basemat*pi.transform.localToWorldMatrix); } } //editor-time-only Update:draw The meshes so we can see the objects in the scene view voidUpdate () {if(editorapplication.isplaying)return; matrix4x4 Mat=transform.localtoworldmatrix; foreach(thingy TinchThings) for(inti =0; I < t.materials.count; i++) Graphics.drawmesh (t.mesh, Mat* t.matrix, t.materials[i], gameobject.layer,NULL, i); } //picking Logic:since We don ' t have gizmos.drawmesh, draw a bounding cube around each thingy voidOndrawgizmos () {drawgizmos (NewColor (0,0,0,0)); } voidondrawgizmosselected () {drawgizmos (NewColor (0,0,1,. 2f)); } voidDrawgizmos (Color Col) {if(editorapplication.isplaying)return; Gizmos.color=col; matrix4x4 Mat=transform.localtoworldmatrix; foreach(thingy TinchThings) {gizmos.matrix= Mat *t.matrix; Gizmos.drawcube (t.mesh.bounds.center, t.mesh.bounds.size); } } //baking stuff:copy in all the referenced objects to the scene on play or build[postprocessscene (-2)] public Static voidonpostprocessscene () {foreach(prefabinstance PiinchUnityEngine.Object.FindObjectsOfType (typeof(prefabinstance))) Bakeinstance (pi); } public Static voidbakeinstance (prefabinstance Pi) {if(!pi.prefab | |!Pi.enabled)return; Pi.enabled=false; Gameobject Go= Prefabutility.instantiateprefab (pi.prefab) asgameobject; quaternion rot=go.transform.localRotation; Vector3 scale=go.transform.localScale; Go.transform.parent=pi.transform; Go.transform.localPosition=vector3.zero; Go.transform.localScale=scale ; Go.transform.localRotation=rot; Pi.prefab=NULL; foreach(prefabinstance childpiinchGo. Getcomponentsinchildren<prefabinstance>()) bakeinstance (childpi); } #endif
the above is two if there are multiple associations ?
Some understandings of Unity3d learning presets (prefab)