MasterCube.Face SideParameter(string name, MasterCube.Face faceSide) { GUILayout.BeginVertical(name, "window"); faceSide.offset = EditorGUILayout.Vector2Field("UV off Set", faceSide.offset); faceSide.scale = EditorGUILayout.Vector2Field("UV scale", faceSide.scale); faceSide.scale.x = Mathf.Clamp(faceSide.scale.x, -float.MaxValue, float.MaxValue); faceSide.scale.y = Mathf.Clamp(faceSide.scale.y, -float.MaxValue, float.MaxValue); faceSide.rotation = EditorGUILayout.Slider("UV rotation", faceSide.rotation, -180, 180); GUILayout.EndVertical(); EditorGUILayout.Space(); return(faceSide); }
void meshTranform(MasterCube.Face faceSide) { var scaleFactor = Vector2.one; switch (faceSide.side) { case MasterCube.FaceSide.Front: scaleFactor.x = cCube.transform.localScale.x; scaleFactor.y = cCube.transform.localScale.y; break; case MasterCube.FaceSide.Back: scaleFactor.x = cCube.transform.localScale.x; scaleFactor.y = cCube.transform.localScale.y; break; case MasterCube.FaceSide.Left: scaleFactor.x = cCube.transform.localScale.z; scaleFactor.y = cCube.transform.localScale.y; break; case MasterCube.FaceSide.Right: scaleFactor.x = cCube.transform.localScale.z; scaleFactor.y = cCube.transform.localScale.y; break; case MasterCube.FaceSide.Top: scaleFactor.x = cCube.transform.localScale.x; scaleFactor.y = cCube.transform.localScale.z; break; case MasterCube.FaceSide.Bottom: scaleFactor.x = cCube.transform.localScale.x; scaleFactor.y = cCube.transform.localScale.z; break; } if (cCube.GetComponent <MeshFilter>().sharedMesh == null) { cCube.GetComponent <MeshFilter>().sharedMesh = (Mesh)Instantiate(cCube.mesh); } Vector2[] uvs = cCube.GetComponent <MeshFilter>().sharedMesh.uv; foreach (UV uv in faceSide.uvs) { if (cCube.mesh == null) { break; } var rot = Quaternion.Euler(0, 0, cCube.rotation + faceSide.rotation); var newuv = new Vector2(((cCube.mesh.uv[uv.index].x + (faceSide.offset.x + cCube.offset.x)) * scaleFactor.x) / (faceSide.scale.x * cCube.scale.x), ((cCube.mesh.uv[uv.index].y + (faceSide.offset.y + cCube.offset.y)) * scaleFactor.y) / (faceSide.scale.y * cCube.scale.y)); newuv = rot * newuv; uvs[uv.index] = newuv; } if (cCube.mesh != null) { cCube.GetComponent <MeshFilter>().sharedMesh = (Mesh)Instantiate(cCube.mesh); cCube.GetComponent <MeshFilter>().sharedMesh.uv = uvs; } }