void Reset() { MegaModifyObject modobj = (MegaModifyObject)gameObject.GetComponent <MegaModifyObject>(); if (modobj != null) { modobj.ModReset(this); } if (GetComponent <Renderer>() != null) { Mesh ms = MegaUtils.GetSharedMesh(gameObject); if (ms != null) { Bounds b = ms.bounds; Offset = -b.center; bbox.min = b.center - b.extents; bbox.max = b.center + b.extents; } } bsize = bbox.Size(); bcenter = bbox.center; Init(); }
void Reset() { #if false MegaModifyObject modobj = (MegaModifyObject)gameObject.GetComponent <MegaModifyObject>(); if (modobj != null) { modobj.ModReset(this); } Renderer rend = GetComponent <Renderer>(); if (rend != null) { Mesh ms = MegaUtils.GetSharedMesh(gameObject); if (ms != null) { Bounds b = ms.bounds; Offset = -b.center; bbox.min = b.center - b.extents; bbox.max = b.center + b.extents; } } if (modobj.selection != null) { Bounds bb = new Bounds(); for (int i = 0; i < modobj.verts.Length; i++) { if (modobj.selection[i] > 0.001f) { bb.Encapsulate(modobj.verts[i]); } } Offset = -bb.center; bbox.min = bb.center - bb.extents; bbox.max = bb.center + bb.extents; } bsize = bbox.Size(); bcenter = bbox.center; Init(); #endif }
void Reset() { if (this.GetComponent <Renderer>() != null) { Mesh ms = MegaUtils.GetSharedMesh(gameObject); if (ms != null) { CalcNormals(ms); Bounds b = ms.bounds; Offset = -b.center; bbox.min = b.center - b.extents; bbox.max = b.center + b.extents; } } }
public void FitFFDToMesh() { if (GetComponent <Renderer>() != null) { Mesh ms = MegaUtils.GetSharedMesh(gameObject); if (ms != null) { Bounds b = ms.bounds; Offset = -b.center; bbox.min = b.center - b.extents; bbox.max = b.center + b.extents; } } bsize = bbox.Size(); bcenter = bbox.center; Init(); }
public void Rebuild(MegaRope rope) { if (source) { Mesh smesh = MegaUtils.GetSharedMesh(source); if (smesh) { bounds = smesh.bounds; sverts = smesh.vertices; overts = new Vector3[smesh.vertexCount]; rope.mesh.Clear(); rope.mesh.vertices = smesh.vertices; rope.mesh.normals = smesh.normals; rope.mesh.uv = smesh.uv; //rope.mesh.uv1 = smesh.uv1; rope.mesh.subMeshCount = smesh.subMeshCount; for (int i = 0; i < smesh.subMeshCount; i++) { rope.mesh.SetTriangles(smesh.GetTriangles(i), i); } MeshRenderer mr = source.GetComponent <MeshRenderer>(); MeshRenderer mr1 = rope.GetComponent <MeshRenderer>(); if (mr1 != null && mr != null) { mr1.sharedMaterials = mr.sharedMaterials; } // Calc the alphas BuildNormalMapping(smesh, true); BuildMesh(rope); } } }
static void AllNewCreateSimplePrefab() { if (Selection.activeGameObject != null) { if (!Directory.Exists("Assets/MegaPrefabs")) { AssetDatabase.CreateFolder("Assets", "MegaPrefabs"); } GameObject obj = Selection.activeGameObject; // Make a copy? GameObject newobj = MegaCopyObject.DoCopyObjects(obj); newobj.name = obj.name; // Get all modifyObjects in children MegaModifyObject[] mods = newobj.GetComponentsInChildren <MegaModifyObject>(); for (int i = 0; i < mods.Length; i++) { // Need method to get the base mesh GameObject pobj = mods[i].gameObject; // Get the mesh and make an asset for it Mesh mesh = MegaUtils.GetSharedMesh(pobj); if (mesh) { string mname = mesh.name; int ix = mname.IndexOf("Instance"); if (ix != -1) { mname = mname.Remove(ix); } string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab"; AssetDatabase.CreateAsset(mesh, meshpath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } MegaWrap[] wraps = newobj.GetComponentsInChildren <MegaWrap>(); for (int i = 0; i < wraps.Length; i++) { // Need method to get the base mesh GameObject pobj = wraps[i].gameObject; // Get the mesh and make an asset for it Mesh mesh = MegaUtils.GetSharedMesh(pobj); if (mesh) { string mname = mesh.name; int ix = mname.IndexOf("Instance"); if (ix != -1) { mname = mname.Remove(ix); } string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab"; AssetDatabase.CreateAsset(mesh, meshpath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } Object prefab = PrefabUtility.CreateEmptyPrefab("Assets/MegaPrefabs/" + newobj.name + "_Prefab.prefab"); //EditorUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab); PrefabUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab); DestroyImmediate(newobj); } }
void InitLinkObjects(MegaRope rope) { rebuild = false; float len = rope.RopeLength; // Assume z axis for now float linklen = (linkOff1.y - linkOff.y) * linkScale.x * LinkSize; //Length - linkOff.y linkcount = (int)(len / linklen); for (int i = linkcount; i < rope.gameObject.transform.childCount; i++) { GameObject go = rope.gameObject.transform.GetChild(i).gameObject; if (Application.isEditor && !Application.isPlaying) { GameObject.DestroyImmediate(go); } else { GameObject.Destroy(go); } #if UNITY_4_0 || UNITY_4_1 || UNITY_4_3 || UNITY_4_7 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5 //go.SetActive(false); #else //go.SetActiveRecursively(false); #endif } if (LinkObj1 == null || LinkObj1.Count == 0) { return; } linkobjs = new Transform[linkcount]; int oi = 0; if (linkcount > rope.gameObject.transform.childCount) { for (int i = 0; i < rope.gameObject.transform.childCount; i++) { GameObject go = rope.gameObject.transform.GetChild(i).gameObject; #if UNITY_4_0 || UNITY_4_1 || UNITY_4_3 || UNITY_4_7 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5 //go.SetActive(true); #else //go.SetActiveRecursively(true); #endif linkobjs[i] = go.transform; } int index = rope.gameObject.transform.childCount; for (int i = index; i < linkcount; i++) { if (RandomOrder) { oi = (int)(Random.value * (float)LinkObj1.Count); } else { oi = (oi + 1) % LinkObj1.Count; } GameObject obj = LinkObj1[oi]; if (obj) { GameObject go = new GameObject(); //(GameObject)Instantiate(LinkObj); //linkMesh); //, Vectp, Quaternion.identity); go.name = "Link"; MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>(); Mesh ms = MegaUtils.GetSharedMesh(obj); //go.transform.localPosition = p; MeshRenderer mr1 = (MeshRenderer)go.AddComponent <MeshRenderer>(); MeshFilter mf1 = (MeshFilter)go.AddComponent <MeshFilter>(); mf1.sharedMesh = ms; mr1.sharedMaterial = mr.sharedMaterial; go.transform.parent = rope.gameObject.transform; linkobjs[i] = go.transform; } } } else { for (int i = 0; i < linkcount; i++) { GameObject go = rope.gameObject.transform.GetChild(i).gameObject; #if UNITY_3_5 go.SetActiveRecursively(true); #else go.SetActive(true); #endif linkobjs[i] = go.transform; } } #if UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_2017 || UNITY_2018 || UNITY_2019 Random.InitState(seed); #else Random.seed = seed; #endif oi = 0; for (int i = 0; i < linkcount; i++) { if (RandomOrder) { oi = (int)(Random.value * (float)LinkObj1.Count); } else { oi = (oi + 1) % LinkObj1.Count; } GameObject obj = LinkObj1[oi]; if (obj) { GameObject go = rope.gameObject.transform.GetChild(i).gameObject; MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>(); Mesh ms = MegaUtils.GetSharedMesh(obj); //go.transform.localPosition = p; MeshRenderer mr1 = (MeshRenderer)go.GetComponent <MeshRenderer>(); MeshFilter mf1 = (MeshFilter)go.GetComponent <MeshFilter>(); mf1.sharedMesh = ms; mr1.sharedMaterial = mr.sharedMaterial; } } }
// Taken from chain mesher void InitLinkObjects(MegaShape path) { if (LinkObj == null) { return; } float len = path.splines[curve].length; // Assume z axis for now float linklen = (linkOff1.y - linkOff.y) * linkScale.x * LinkSize; linkcount = (int)(len / linklen); for (int i = linkcount; i < gameObject.transform.childCount; i++) { GameObject go = gameObject.transform.GetChild(i).gameObject; if (Application.isEditor) { DestroyImmediate(go); } else { Destroy(go); } } linkobjs = new Transform[linkcount]; if (linkcount > gameObject.transform.childCount) { for (int i = 0; i < gameObject.transform.childCount; i++) { GameObject go = gameObject.transform.GetChild(i).gameObject; #if UNITY_3_5 go.SetActiveRecursively(true); #else go.SetActive(true); #endif linkobjs[i] = go.transform; } int index = gameObject.transform.childCount; for (int i = index; i < linkcount; i++) { GameObject go = new GameObject(); go.name = "Link"; GameObject obj = LinkObj; if (obj) { MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>(); Mesh ms = MegaUtils.GetSharedMesh(obj); MeshRenderer mr1 = (MeshRenderer)go.AddComponent <MeshRenderer>(); MeshFilter mf1 = (MeshFilter)go.AddComponent <MeshFilter>(); mf1.sharedMesh = ms; mr1.sharedMaterial = mr.sharedMaterial; go.transform.parent = gameObject.transform; linkobjs[i] = go.transform; } } } else { for (int i = 0; i < linkcount; i++) { GameObject go = gameObject.transform.GetChild(i).gameObject; #if UNITY_3_5 go.SetActiveRecursively(true); #else go.SetActive(true); #endif linkobjs[i] = go.transform; } } #if UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_2017 Random.InitState(0); #else Random.seed = 0; #endif for (int i = 0; i < linkcount; i++) { GameObject obj = LinkObj; //1[oi]; GameObject go = gameObject.transform.GetChild(i).gameObject; MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>(); Mesh ms = MegaUtils.GetSharedMesh(obj); MeshRenderer mr1 = (MeshRenderer)go.GetComponent <MeshRenderer>(); MeshFilter mf1 = (MeshFilter)go.GetComponent <MeshFilter>(); mf1.sharedMesh = ms; mr1.sharedMaterials = mr.sharedMaterials; } }
public float Init(float tw) { Mesh ms = null; if (obj != null) { ms = MegaUtils.GetSharedMesh(obj); } if (ms != null) { Matrix4x4 tm = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(prerot), Vector3.one); verts = ms.vertices; miny = float.MaxValue; maxy = float.MinValue; for (int i = 0; i < verts.Length; i++) { verts[i] = tm.MultiplyPoint3x4(verts[i]); if (verts[i].y < miny) { miny = verts[i].y; } if (verts[i].y > maxy) { maxy = verts[i].y; } } uvs = ms.uv; normals = ms.normals; colors = ms.colors; for (int i = 0; i < normals.Length; i++) { normals[i] = tm.MultiplyVector(normals[i]); } tris = new MegaTriList[ms.subMeshCount]; for (int i = 0; i < ms.subMeshCount; i++) { tris[i].tris = ms.GetTriangles(i); } tw += weight; tweight = tw; subcount = ms.subMeshCount; area = ms.bounds.size.x * scale * ms.bounds.size.z * scale; places.Clear(); } // Proxy if (proxymesh) { Matrix4x4 tm = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(prerot), Vector3.one); proxyverts = proxymesh.vertices; //miny = float.MaxValue; //maxy = float.MinValue; for (int i = 0; i < proxyverts.Length; i++) { proxyverts[i] = tm.MultiplyPoint3x4(proxyverts[i]); //if ( verts[i].y < miny ) // miny = verts[i].y; //if ( verts[i].y > maxy ) // maxy = verts[i].y; } //uvs = ms.uv; proxynorms = proxymesh.normals; //colors = ms.colors; for (int i = 0; i < proxynorms.Length; i++) { proxynorms[i] = tm.MultiplyVector(proxynorms[i]); } proxytris = proxymesh.triangles; //for ( int i = 0; i < ms.subMeshCount; i++ ) // tris[i].tris = ms.GetTriangles(i); //tw += weight; //tweight = tw; //subcount = ms.subMeshCount; //area = ms.bounds.size.x * scale * ms.bounds.size.z * scale; //places.Clear(); } return(tw); }