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