Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
                }
            }
        }