//----- 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); }
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); } } }