/*
             * テクスチャを生成する
             */
            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());
                }
            }
示例#2
0
            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();
                }
            }
示例#4
0
            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")))
                {
                }
            }