public static void LinkTexture(string texGuid, string arrGuid, bool isAlpha = false)
        {
                        #if UNITY_EDITOR
            string userDataTag = "TexArr_textureArray_as" + (isAlpha? "Source" : "Alpha");
            UnityEditor.AssetImporter importer = AssetsExtensions.GetImporter(texGuid);

            if (importer == null)
            {
                Debug.Log("Could not get importer for " + UnityEditor.AssetDatabase.GUIDToAssetPath(texGuid) + " to assign texture");
                return;
            }

            string[] texData = AssetsExtensions.GetUserData(importer, userDataTag);
            if (!texData.Contains(arrGuid))             //not already signed as used
            {
                ArrayTools.Add(ref texData, arrGuid);
                AssetsExtensions.SetUserData(texGuid, userDataTag, texData, reload: false);
            }

            //writing hash for the newly assigned textures
            string    path    = UnityEditor.AssetDatabase.GUIDToAssetPath(texGuid);
            Texture2D tex     = UnityEditor.AssetDatabase.LoadAssetAtPath <Texture2D>(path);
            string    texHash = tex.GetHash().ToString();                                            //tex.imageContentsHash.ToString();
            AssetsExtensions.SetUserData(importer, "Hash", new string[] { texHash }, reload: false); //will write only if hash changed
                        #endif
        }
        public void Add(Texture2D tex, Texture2D al)
        {
                        #if UNITY_EDITOR
            ArrayTools.Add(ref srcArr, new SrcLayer());
            TextureArrayTools.Add(ref texArr, new Texture2D(texArr.width, texArr.height));

            if (tex != null)
            {
                SetSource(tex, srcArr.Length - 1, isAlpha: false, saveSources: false);
            }
            if (al != null)
            {
                SetSource(al, srcArr.Length - 1, isAlpha: true, saveSources: false);
            }

            SaveSources();
                        #endif
        }
示例#3
0
        public static void SetUserData(this UnityEditor.AssetImporter importer, string param, string[] data, bool reload = false)
        {
            char endline = '\n';             //';'

            string userData = importer.userData;

            string[] userDataSplit = userData.Split('\n', ';');

            //preparing new data line
            if (data == null)
            {
                data = new string[0];
            }
            string newDataString = param + ":" + data.ToStringMemberwise(separator: ",");

            //param line number (-1 if not found)
            int numInSplit = -1;

            for (int i = 0; i < userDataSplit.Length; i++)
            {
                if (userDataSplit[i].StartsWith(param + ":"))
                {
                    numInSplit = i;
                }
            }

            //erasing empty data
            if (numInSplit >= 0 && data.Length == 0)
            {
                ArrayTools.RemoveAt(ref userDataSplit, numInSplit);
            }

            //replacing line
            if (numInSplit >= 0 && data.Length != 0)
            {
                userDataSplit[numInSplit] = newDataString;
            }

            //adding new line
            if (numInSplit == -1 && data.Length != 0)
            {
                ArrayTools.Add(ref userDataSplit, newDataString);
            }

            //to string
            string newUserData = "";

            for (int i = 0; i < userDataSplit.Length; i++)
            {
                if (userDataSplit[i].Length == 0)
                {
                    continue;
                }
                newUserData += userDataSplit[i];
                if (i != userDataSplit.Length - 1)
                {
                    newUserData += endline;
                }
            }

            //writing
            if (newUserData != userData)
            {
                importer.userData = newUserData;

                UnityEditor.EditorUtility.SetDirty(importer);
                UnityEditor.AssetDatabase.WriteImportSettingsIfDirty(importer.assetPath);
                if (reload)
                {
                    UnityEditor.AssetDatabase.Refresh();
                }
            }
        }