public static bool UnpackCommonPart(string name, bool lightmapped, int lod) { string lodDir = lod == 0 ? lod0Dir : lod == 1 ? lod1Dir : lod2Dir; string extension = lod <= 1 ? ".fbx" : ".prefab"; if (File.Exists(Path.Combine(geometryPath, commonPartsDir, lightmapped ? lightmappedDir : "", lodDir, name + extension))) { return(true); } if (lod <= 1) { OpenDB(); var entry = commonPartsZipArchive.GetEntry(name + ".fbx"); if (entry != null) { var fileName = entry.Name; var filePath = Path.Combine(geometryPath, commonPartsDir, lightmapped ? lightmappedDir : "", lodDir, fileName); var directoryName = Path.GetDirectoryName(filePath); if (directoryName.Length > 0) { Directory.CreateDirectory(directoryName); } var zipStream = entry.Open(); var fileStream = File.Create(filePath); zipStream.CopyTo(fileStream); fileStream.Dispose(); zipStream.Dispose(); #if UNITY_EDITOR AssetDatabase.ImportAsset(filePath); #endif return(true); } } else { // Generate LOD 2. var knob = name.StartsWith("knob"); var tube = name.StartsWith("tube"); var hollow = knob ? name.EndsWith("C") : tube; var tubeOrPinHeight = name.Contains("_01_") ? 0.21f : name.Contains("_02_") ? 0.85f : 2.73f; var height = knob ? 0.178f : tubeOrPinHeight; var radius = knob ? 0.25f : tube ? 0.3377f : 0.1575f; PartUtility.CreateCommonPartLod2(name, height, radius, knob, hollow, radius - 0.08f, lightmapped); return(true); } return(false); }
void ProcessCommon(GameObject go, bool genLightmapUV, int lod) { MeshFilter[] mfs = go.GetComponentsInChildren <MeshFilter>(); foreach (var mf in mfs) { if (mf && mf.sharedMesh) { MeshTool mt = new MeshTool(mf.sharedMesh); var normalMappedLogo = go.name.StartsWith("knob") && !go.name.EndsWith("C"); // Generate lowest possible LOD. var bounds = mf.sharedMesh.bounds; var knob = go.name.StartsWith("knob"); var hollow = knob ? go.name.EndsWith("C") : go.name.StartsWith("tube"); PartUtility.CreateCommonPartLod2(go.name, bounds.size.y, bounds.extents.x, knob, hollow, bounds.extents.x - 0.08f, genLightmapUV); if (lod == 0) { mt.GenerateChamfer(1.0f / mf.transform.localScale.x); } if (normalMappedLogo) { mt.GenerateKnobNormalMapUVs(); } else { mt.ClearNormalMapUVs(); } mt.ApplyTo(mf.sharedMesh, normalMappedLogo, genLightmapUV); EditorUtility.SetDirty(mf.sharedMesh); System.GC.Collect(); } } }