Большая просьба, если кто-то затеется улучшить код, выкладывать версии тут, а не под подушку.
NeoMaterialSearch.js
Синтаксис:
Используется javascript
import System;
import System.IO;
class NeoMaterialSearch extends ScriptableWizard
{
private static var startTex : Texture;
private static var textureToSearch : Texture = Selection.activeObject as Texture;
private var groupEnabled = false;
private var showInspector = true;
private static var materials : Array = new Array();
private static var mainTexture = true;
private static var bampTexture = true;
private static var fileInfo : FileInfo[];
@MenuItem("NeoTools/Textures/Get All Materials from Texture")
static function CreateWizard ()
{
ScriptableWizard.DisplayWizard("Get All Materials from Texture", NeoMaterialSearch, "Find");
var dir : DirectoryInfo = DirectoryInfo(Application.dataPath);
fileInfo = dir.GetFiles("*.mat", SearchOption.AllDirectories);
}
function OnWizardUpdate()
{
textureToSearch = Selection.activeObject as Texture;
}
static function Search()
{
if (!textureToSearch) return;
startTex = textureToSearch;
materials.Clear();
var mat : Material;
var tex : Texture;
var added = false;
var fileUtil :FileUtil = new FileUtil();
var path : int = Application.dataPath.length+1;
for ( var file : FileInfo in fileInfo)
{
mat = EditorUtility.FindAsset(file.ToString().Remove(0,path), Material);
if (mat)
{
if (mainTexture && mat.HasProperty("_MainTex"))
{
tex = mat.GetTexture("_MainTex");
if (tex)
{
if (tex.name == textureToSearch.name)
{
materials.Add(mat);
added = true;
}
}
}
if (bampTexture && mat.HasProperty("_BampMap"))
{
tex = mat.GetTexture("_BampMap");
if (tex)
{
if (tex.name == textureToSearch.name && !added)
{
materials.Add(mat);
}
}
}
}
added = false;
tex = null;
}
}
function OnDestroy ()
{
textureToSearch = null;
materials.Clear();
}
function OnGUI ()
{
DragAndDrop.AcceptDrag();
showInspector = EditorGUI.InspectorTitlebar(Rect(0,0,512,50),showInspector,textureToSearch);
if (!showInspector) return;
// textureToSearch = Selection.activeObject as Texture;
GUILayout.BeginVertical();
GUILayout.Space (55);
GUILayout.Box (textureToSearch,GUILayout.MinWidth(256), GUILayout.MaxWidth(512), GUILayout.MinHeight(256), GUILayout.MaxHeight(512), GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
GUILayout.EndVertical();
EditorGUILayout.Separator();
groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
EditorGUILayout.BeginHorizontal();
mainTexture = EditorGUILayout.Toggle ("Find mine texture", mainTexture);
bampTexture = EditorGUILayout.Toggle ("Find bamp map", bampTexture);
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndToggleGroup ();
EditorGUILayout.Separator();
textureToSearch = EditorGUILayout.ObjectField( GUIContent(textureToSearch), textureToSearch, Texture,GUILayout.MinWidth(40), GUILayout.MaxWidth(512), GUILayout.MinHeight(40), GUILayout.MaxHeight(40), GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
if (startTex != textureToSearch) Search();
EditorGUILayout.BeginVertical();
EditorGUILayout.Separator();
/* if (GUILayout.Button("Search"))
{
Search();
} */
if (materials.length > 0)
{
EditorGUILayout.Separator();
GUILayout.BeginHorizontal();
GUILayout.Label("Total materials found : " + fileInfo.length);
GUILayout.Label(" and ");
GUILayout.Label("Materials with selected texture found : " + materials.length);
GUILayout.EndHorizontal();
EditorGUILayout.Separator();
GUILayout.FlexibleSpace();
var l : float = materials.length;
var mat : Material;
for (var i : int = 0; i < l; i++)
{
GUILayout.BeginHorizontal();
mat = materials[i];
EditorGUILayout.ObjectField(mat, Material);
if (i+1 < l)
{
mat = materials[++i];
EditorGUILayout.ObjectField(mat, Material);
}
GUILayout.EndHorizontal();
}
}
EditorGUILayout.EndVertical();
EditorGUILayout.Separator();
if(GUILayout.Button("Developed by Neodrop"))Application.OpenURL("http://www.unity3d.ru");
EditorGUILayout.Separator();
if (GUILayout.Button("Close this window")) Close();
}
}
import System.IO;
class NeoMaterialSearch extends ScriptableWizard
{
private static var startTex : Texture;
private static var textureToSearch : Texture = Selection.activeObject as Texture;
private var groupEnabled = false;
private var showInspector = true;
private static var materials : Array = new Array();
private static var mainTexture = true;
private static var bampTexture = true;
private static var fileInfo : FileInfo[];
@MenuItem("NeoTools/Textures/Get All Materials from Texture")
static function CreateWizard ()
{
ScriptableWizard.DisplayWizard("Get All Materials from Texture", NeoMaterialSearch, "Find");
var dir : DirectoryInfo = DirectoryInfo(Application.dataPath);
fileInfo = dir.GetFiles("*.mat", SearchOption.AllDirectories);
}
function OnWizardUpdate()
{
textureToSearch = Selection.activeObject as Texture;
}
static function Search()
{
if (!textureToSearch) return;
startTex = textureToSearch;
materials.Clear();
var mat : Material;
var tex : Texture;
var added = false;
var fileUtil :FileUtil = new FileUtil();
var path : int = Application.dataPath.length+1;
for ( var file : FileInfo in fileInfo)
{
mat = EditorUtility.FindAsset(file.ToString().Remove(0,path), Material);
if (mat)
{
if (mainTexture && mat.HasProperty("_MainTex"))
{
tex = mat.GetTexture("_MainTex");
if (tex)
{
if (tex.name == textureToSearch.name)
{
materials.Add(mat);
added = true;
}
}
}
if (bampTexture && mat.HasProperty("_BampMap"))
{
tex = mat.GetTexture("_BampMap");
if (tex)
{
if (tex.name == textureToSearch.name && !added)
{
materials.Add(mat);
}
}
}
}
added = false;
tex = null;
}
}
function OnDestroy ()
{
textureToSearch = null;
materials.Clear();
}
function OnGUI ()
{
DragAndDrop.AcceptDrag();
showInspector = EditorGUI.InspectorTitlebar(Rect(0,0,512,50),showInspector,textureToSearch);
if (!showInspector) return;
// textureToSearch = Selection.activeObject as Texture;
GUILayout.BeginVertical();
GUILayout.Space (55);
GUILayout.Box (textureToSearch,GUILayout.MinWidth(256), GUILayout.MaxWidth(512), GUILayout.MinHeight(256), GUILayout.MaxHeight(512), GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
GUILayout.EndVertical();
EditorGUILayout.Separator();
groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
EditorGUILayout.BeginHorizontal();
mainTexture = EditorGUILayout.Toggle ("Find mine texture", mainTexture);
bampTexture = EditorGUILayout.Toggle ("Find bamp map", bampTexture);
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndToggleGroup ();
EditorGUILayout.Separator();
textureToSearch = EditorGUILayout.ObjectField( GUIContent(textureToSearch), textureToSearch, Texture,GUILayout.MinWidth(40), GUILayout.MaxWidth(512), GUILayout.MinHeight(40), GUILayout.MaxHeight(40), GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
if (startTex != textureToSearch) Search();
EditorGUILayout.BeginVertical();
EditorGUILayout.Separator();
/* if (GUILayout.Button("Search"))
{
Search();
} */
if (materials.length > 0)
{
EditorGUILayout.Separator();
GUILayout.BeginHorizontal();
GUILayout.Label("Total materials found : " + fileInfo.length);
GUILayout.Label(" and ");
GUILayout.Label("Materials with selected texture found : " + materials.length);
GUILayout.EndHorizontal();
EditorGUILayout.Separator();
GUILayout.FlexibleSpace();
var l : float = materials.length;
var mat : Material;
for (var i : int = 0; i < l; i++)
{
GUILayout.BeginHorizontal();
mat = materials[i];
EditorGUILayout.ObjectField(mat, Material);
if (i+1 < l)
{
mat = materials[++i];
EditorGUILayout.ObjectField(mat, Material);
}
GUILayout.EndHorizontal();
}
}
EditorGUILayout.EndVertical();
EditorGUILayout.Separator();
if(GUILayout.Button("Developed by Neodrop"))Application.OpenURL("http://www.unity3d.ru");
EditorGUILayout.Separator();
if (GUILayout.Button("Close this window")) Close();
}
}