//----- property -----

        //----- method -----

        public DicingData Generate(string exportPath, int blockSize, int padding, Texture2D[] sourceTextures, bool hasAlphaMap)
        {
            var result = new DicingData();

            blockId           = 0;
            blockIdbyHashCode = new Dictionary <string, ushort?>();

            foreach (var sourceTexture in sourceTextures)
            {
                var editableTexture = new EditableTexture(sourceTexture);

                editableTexture.Editable();
            }

            var dicingTargets = ReadTextureBlock(blockSize, sourceTextures);

            // 補間用ピクセル分のパディングを追加.
            padding += 2;

            // 透明ピクセル、同じピクセル情報のブロックは対象外.
            var totalBlockCount = dicingTargets
                                  .SelectMany(x => x.blocks)
                                  .Select(x => x.blockId)
                                  .Distinct()
                                  .Count();

            var directory   = Path.GetDirectoryName(exportPath);
            var textureName = Path.ChangeExtension(Path.GetFileName(exportPath), ".png");
            var texturePath = PathUtility.Combine(directory, textureName);

            var textureSize = CalcRequireTextureSize(blockSize, padding, totalBlockCount);

            var texture = TextureUtility.CreateEmptyTexture(textureSize, textureSize);

            result.SourceTextures = BuildDicingSourceData(dicingTargets);

            result.DicingBlocks = BitBlockTransfer(texture, blockSize, padding, dicingTargets, hasAlphaMap);

            File.WriteAllBytes(texturePath, texture.EncodeToPNG());

            AssetDatabase.ImportAsset(texturePath);
            AssetDatabase.Refresh();

            result.Texture = AssetDatabase.LoadMainAssetAtPath(texturePath) as Texture2D;

            return(result);
        }
Exemplo n.º 2
0
        private void RegisterEditableTexture(Texture texture, bool restore)
        {
            if (texture == null)
            {
                return;
            }

            var editableTexture = new EditableTexture(texture);

            if (!editableTextures.ContainsKey(editableTexture.Guid))
            {
                editableTexture.Editable();

                //UnityEditorUtility.RegisterEditAsset(editableTexture.Texture);

                if (restore)
                {
                    editableTextures.Add(editableTexture.Guid, editableTexture);
                }
            }
        }