Ejemplo n.º 1
0
        private void LoadLocalImage(Material mat, string floderPath, LoadedTextureType texType)
        {
            //递归查找贴图
            string texturePath = ZipUtility.FindFileFullName(floderPath, mat.name + texType.ToString());

            if (string.IsNullOrEmpty(texturePath))
            {
                return;
            }

            // Debug.LogFormat("<color=#ff0000>找到贴图:{0}</color>", texturePath);
            FileInfo textureFI = new FileInfo(texturePath);

            byte[] texBytes;
            //System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(16, 16);
            //if (textureFI.Extension.Equals(".tga", StringComparison.OrdinalIgnoreCase))
            //{
            //    //TGA tgaMap = new TGA(texturePath);
            //    TGA2PNG.OpenTGAFile(GetImageByte(texturePath), ref bitmap);
            //    //texturePath = $"{textureFI.Directory}\\{textureFI.Name}.png";
            //    MemoryStream ms = new MemoryStream();
            //    //tgaMap.ToBitmap().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            //    bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            //    texBytes = ms.ToArray();
            //    //ms.Dispose();
            //}
            //else
            {
                texBytes = File.ReadAllBytes(texturePath);
            }

            //UnityWebRequest request = UnityWebRequestTexture.GetTexture($"file:///{texturePath}");
            //await request.SendWebRequest();
            //Texture2D tex2D = DownloadHandlerTexture.GetContent(request);

            Texture2D tex2D = new Texture2D(16, 16);

            tex2D.LoadImage(texBytes);
            tex2D.Compress(false);
            //Debug.Log("材质球 - " + mat.name);

            switch (texType)
            {
            case LoadedTextureType._Albedo:
                if (mat.HasProperty("_MainTex"))
                {
                    mat.SetTexture("_MainTex", tex2D);
                }
                break;

            case LoadedTextureType._AlbedoTransparency:
                if (mat.HasProperty("_MainTex"))
                {
                    mat.SetTexture("_MainTex", tex2D);
                }
                break;

            case LoadedTextureType._Metallic:
                if (mat.HasProperty("_MetallicGlossMap"))
                {
                    mat.color = Color.white;
                    mat.SetTexture("_MetallicGlossMap", tex2D);
                    //if (mat.HasProperty("_GlossMapScale"))
                    //{
                    //    //float glossValue = mat.GetFloat("_Glossiness");
                    //    //float setGlossValue = glossValue <= 0 ? 0.5f : glossValue;
                    //    mat.SetFloat("_GlossMapScale", 1f);
                    //}
                }
                break;

            case LoadedTextureType._MetallicSmoothness:
                if (mat.HasProperty("_MetallicGlossMap"))
                {
                    mat.color = Color.white;
                    mat.SetTexture("_MetallicGlossMap", tex2D);
                    //if (mat.HasProperty("_GlossMapScale"))
                    //{
                    //    //float glossValue = mat.GetFloat("_Glossiness");
                    //    //float setGlossValue = glossValue <= 0 ? 0.5f : glossValue;
                    //    mat.SetFloat("_GlossMapScale", 1f);
                    //}
                }
                break;

            case LoadedTextureType._Normal:
                if (mat.HasProperty("_BumpMap"))
                {
                    mat.SetTexture("_BumpMap", tex2D);
                }
                break;

            case LoadedTextureType._ao:
                if (mat.HasProperty("_OcclusionMap"))
                {
                    mat.SetTexture("_OcclusionMap", tex2D);
                }
                break;

            default:
                break;
            }
        }