/* * テクスチャを生成する */ private void GenerateDiffTex(DifferenceTexture diffTex) { /* * ベースのテクスチャ2D * 最後にこのテクスチャ2Dに上書きしてエクスポートする */ Texture2D baseTexture = null; /* * ベースのピクセル(カラー)配列 * この配列にレイヤーを上書きしていく */ Color[] baseTexturePixels = null; for (int i = 0; i < diffTex.parts_list.Length; i++) { DifferenceParts diffParts = diffTex.parts_list[i]; PartsTexture partsTex = diffParts.texture_list[diffParts.select]; string texturePath = FileUtil.GetPathFromRelative(basePath, partsTex.texture_path); if (File.Exists(texturePath)) { if (baseTexture == null) { baseTexture = FileUtil.PNGToTexture2D(texturePath); baseTexturePixels = baseTexture.GetPixels(); } else { Color[] layerPixels = FileUtil.PNGToTexture2D(texturePath).GetPixels(); for (int pixelCount = 0; pixelCount < baseTexturePixels.Length; pixelCount++) { Color layerPixel = layerPixels[pixelCount]; if (layerPixel.a > 0) { baseTexturePixels[pixelCount] = layerPixel; } } } } if (baseTexture == null) { return; } baseTexture.SetPixels(baseTexturePixels); baseTexture.Apply(); string textureOutputPath = FileUtil.GetPathFromRelative(basePath, diffTex.output_path); File.WriteAllBytes(textureOutputPath, baseTexture.EncodeToPNG()); } }
public void GenerateDiffTex(int index) { Texture2D baseTexture = null; Color[] baseTexturePixels = null; DifferenceTexture diffTex = differenceTextures[index]; for (int diffPartsCount = 0; diffPartsCount < diffTex.parts_list.Length; diffPartsCount++) { DifferenceParts diffParts = diffTex.parts_list[diffPartsCount]; String texturePath = diffParts.texture_list[diffParts.select].texture_path; if (File.Exists(outputPath + texturePath)) { if (baseTexture == null) { baseTexture = FileUtil.PNGToTexture2D(outputPath + texturePath); baseTexturePixels = baseTexture.GetPixels(); } else { Color[] diffPixels = FileUtil.PNGToTexture2D(outputPath + texturePath).GetPixels(); for (int pixelCount = 0; pixelCount < baseTexturePixels.Length; pixelCount++) { Color diffPixel = diffPixels[pixelCount]; if (diffPixel.a > 0) { baseTexturePixels[pixelCount] = diffPixel; } } } } if (baseTexture == null) { return; } baseTexture.SetPixels(baseTexturePixels); baseTexture.Apply(); String textureOutputPath = outputPath + diffTex.output_path; String outputFolder = textureOutputPath.Replace(Path.GetFileName(textureOutputPath), ""); Directory.CreateDirectory(outputFolder); File.WriteAllBytes(textureOutputPath, baseTexture.EncodeToPNG()); } }
private void OnDiffTexGUI() { for (int i = 0; i < differenceTextureGenerator.difference_texture_list.Length; i++) { if (i >= 1) { GUILayout.Space(8); } DifferenceTexture diffTex = differenceTextureGenerator.difference_texture_list[i]; GUILayout.Label("・" + I18N.Instance().Get(diffTex.name), styleTextureNameLabel); if (diffTex.description != null && diffTex.description != "") { GUIUtil.RenderLabel(I18N.Instance().Get(diffTex.description)); } for (int partsListCount = 0; partsListCount < diffTex.parts_list.Length; partsListCount++) { DifferenceParts diffParts = diffTex.parts_list[partsListCount]; GUILayout.Space(2); GUILayout.Label(I18N.Instance().Get(diffParts.name), stylePartsNameLabel); if (diffParts.description != null && diffParts.description != "") { GUIUtil.RenderLabel(I18N.Instance().Get(diffParts.description)); } List <string> selectGridList = new List <string>(); for (int selectGridCount = 0; selectGridCount < diffParts.texture_list.Length; selectGridCount++) { selectGridList.Add(I18N.Instance().Get(diffParts.texture_list[selectGridCount].name)); } GUILayout.Space(2); diffParts.select = GUILayout.SelectionGrid(diffParts.select, selectGridList.ToArray(), 3); } GUILayout.Space(8); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(I18N.Instance().Get("difftex.button.generate_tex") + I18N.Instance().Get(diffTex.name))) { GenerateDiffTex(diffTex); UpdateAssets(); } GUILayout.EndHorizontal(); } }
public void OnGUI() { if (differenceTextures == null) { return; } for (int i = 0; i < differenceTextures.Length; i++) { DifferenceTexture differenceTexture = differenceTextures[i]; GUILayout.Label(I18N.Instance().Get(differenceTexture.texture_name), titleLabelStyle); if (differenceTexture.parts_list != null) { for (int partsCount = 0; partsCount < differenceTexture.parts_list.Length; partsCount++) { DifferenceParts differenceParts = differenceTexture.parts_list[partsCount]; GUILayout.Label(I18N.Instance().Get(differenceParts.parts_name)); //SelectGrid用のリストを作る List <String> selectGridList = new List <String>(); for (int selectGridCount = 0; selectGridCount < differenceParts.texture_list.Length; selectGridCount++) { selectGridList.Add(I18N.Instance().Get(differenceParts.texture_list[selectGridCount].name)); } differenceParts.select = GUILayout.SelectionGrid(differenceParts.select, selectGridList.ToArray(), 3); GUILayout.Space(4); } if (GUILayout.Button(I18N.Instance().Get(differenceTexture.texture_name))) { GenerateDiffTex(i); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } GUILayout.Space(16); } if (GUILayout.Button(I18N.Instance().Get("difftex.button.generate_all"))) { } }