Пример #1
0
        private Texture ChangeTexFile(string dir, string filename, int matNo1, string propName)
        {
            Texture changedTex;
            // キャッシュ削除用に変更前のテクスチャを取得
            var    srcTex    = material.GetTexture(propName) as Texture2D;
            string extension = Path.GetExtension(filename).ToLower();

            if (extension.Length == 0 || extension == FileConst.EXT_TEXTURE)
            {
                string texName;
                if (extension.Length == 0)
                {
                    texName   = filename;
                    filename += FileConst.EXT_TEXTURE;
                }
                else
                {
                    texName = filename.Substring(0, filename.Length - 4);
                }
                holder.currentMaid.body0.ChangeTex(holder.currentSlot.Name, matNo1, propName, filename, null, MaidParts.PARTS_COLOR.NONE);

                // ChangeTexは、Materialからロードした時と違い、nameにファイル名が設定されてしまうため、
                // 拡張子を除いた名前を再設定
                changedTex = material.GetTexture(propName);
                if (changedTex != null)
                {
                    changedTex.name = texName;
                }
            }
            else
            {
                TBodySkin slot = holder.currentMaid.body0.GetSlot(holder.currentSlot.Name);
                // 直接イメージをロードして適用(要dir指定)
                var mat = holder.GetMaterial(slot, matNo1);
                if (mat == null)
                {
                    return(null);
                }

                byte[] img   = UTY.LoadImage(Path.Combine(dir, filename));
                var    tex2d = new Texture2D(1, 1, TextureFormat.RGBA32, false);
                tex2d.LoadImage(img);
                slot.listDEL.Add(tex2d);
                // tex以外は拡張子を付与したままとする
                tex2d.name = filename;   //Path.GetFileNameWithoutExtension(filename);

                mat.SetTexture(propName, tex2d);
                changedTex = tex2d;
            }

            // テクスチャ変更後は、以前のFilterParamやキャッシュをリセット
            if (srcTex != null)
            {
                textureModifier.RemoveCache(srcTex);
                textureModifier.RemoveFilter(holder.currentMaid, holder.currentSlot.Name, material, srcTex);
            }
            return(changedTex);
        }
Пример #2
0
        private Texture ChangeTexFile(string dir, string filename, int matNo1, string propName)
        {
            Texture changedTex;
            // キャッシュ削除用に変更前のテクスチャを取得
            var srcTex = material.GetTexture(propName) as Texture2D;
            // ReSharper disable once PossibleNullReferenceException  nullを返すのはnull入力時のみ.ここではありえない
            var extension = Path.GetExtension(filename).ToLower();

            if (extension.Length == 0 || extension == FileConst.EXT_TEXTURE)
            {
                string texName;
                if (extension.Length == 0)
                {
                    texName   = filename;
                    filename += FileConst.EXT_TEXTURE;
                }
                else
                {
                    texName = filename.Substring(0, filename.Length - 4);
                }
                LogUtil.Debug("ChangeTex:", filename, ", propName:", propName);
                holder.CurrentMaid.body0.ChangeTex(holder.CurrentSlot.Name, 0, matNo1, propName, filename, null, MaidParts.PARTS_COLOR.NONE);

                // ChangeTexは、Materialからロードした時と違い、nameにファイル名が設定されてしまうため、
                // 拡張子を除いた名前を再設定
                changedTex = material.GetTexture(propName);
                if (changedTex != null)
                {
                    changedTex.name = texName;
                }
            }
            else
            {
                var slot = holder.CurrentMaid.body0.GetSlot((int)holder.CurrentSlot.Id);
                // 直接イメージをロードして適用(要dir指定)
                var mat = holder.GetMaterial(slot, matNo1);
                if (mat == null)
                {
                    return(null);
                }

                var img   = UTY.LoadImage(Path.Combine(dir, filename));
                var tex2D = new Texture2D(1, 1, TextureFormat.ARGB32, false);
                tex2D.LoadImage(img);
                slot.listDEL.Add(tex2D);
                // tex以外は拡張子を付与したままとする
                tex2D.name = filename;   //Path.GetFileNameWithoutExtension(filename);

                LogUtil.Debug("SetTexture:", filename, ", propName:", propName, ", (", tex2D.width, ",", tex2D.height, ")");
                mat.SetTexture(propName, tex2D);
                changedTex = tex2D;
            }

            // テクスチャ変更後は、以前のFilterParamやキャッシュをリセット
            if (srcTex == null)
            {
                return(changedTex);
            }
            textureModifier.RemoveCache(srcTex);
            textureModifier.RemoveFilter(holder.CurrentMaid, holder.CurrentSlot.Name, material, srcTex);
            return(changedTex);
        }