Unity에서 Material에서 참조하는 shader를 보고 Txt에 인쇄합니다.
4613 단어 Unity
기본적인 사고방식은 먼저 대상을 오른쪽 단추로 눌렀을 때, 대상이 Shader 파일일 때,SearchShader 함수는 응답할 수 있고, 그 다음에 고정된 폴더에서 이 폴더의 모든 Material 대상을 두루 훑어본 다음, 이 Material 대상의 경로를listMaterial에 저장하는 것이다.그런 다음 Unity에서 시각화된 EditorUtility를 호출합니다.Display ProgressBar 방법은 현재 검색된 대상을 보고 이 대상이 인용한 Shder가 우리가 오른쪽 단추를 눌렀는지 비교합니다.만약 그렇다면, 이 대상의 정보를 다른listTargetMaterial에 저장합니다.마지막 인쇄StreamWriter를 통해 원하는 결과를 출력합니다
코드는 다음과 같습니다.
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
public class SearchShader {
public static string FilePath = "Assets/Materials";
// Material
public static List listMatrials;
public static List listTargetMaterial;
public static string selectedShaderName;
public static StringBuilder sb;
[MenuItem("Assets/SearchShader", true)]
private static bool OptionSelectAvailable()
{
if(Selection.activeObject == null)
{
return false;
}
return Selection.activeObject.GetType() == typeof(Shader);
}
[MenuItem("Assets/SearchShader")]
private static void SearchConstantShader()
{
Debug.Log(" Shader :" + Selection.activeObject.name);
sb = new StringBuilder();
selectedShaderName = Selection.activeObject.name;
listMatrials = new List();
listMatrials.Clear();
listTargetMaterial = new List();
listTargetMaterial.Clear();
// eg:projectPath = D:Project/Test/Assets
string projectPath = Application.dataPath;
//eg:projectPath = D:Project/Test
projectPath = projectPath.Substring(0, projectPath.IndexOf("Assets"));
try
{
// Matrial Path
GetMaterialsPath(projectPath, FilePath, "Material",ref listMatrials);
}
catch(System.Exception e)
{
Debug.LogError(e);
}
for (int i = 0; i < listMatrials.Count; i++)
{
EditorUtility.DisplayProgressBar("Check Materials", "Current Material :"
+ i + "/" + listMatrials.Count,(float)i/ listMatrials.Count);
try
{
// Check
BegainCheckMaterials(listMatrials[i]);
}
catch (System.Exception e)
{
EditorUtility.ClearProgressBar();
Debug.LogError(e);
}
}
PrintToTxt();
EditorUtility.ClearProgressBar();
Debug.Log("Check Success");
}
// Matrial Path
public static void GetMaterialsPath(string projectPath,string targetFilePath,string searchType,ref List array)
{
if (Directory.Exists(targetFilePath))
{
string[] guids;
//
guids = AssetDatabase.FindAssets("t:" + searchType, new[] { targetFilePath });
foreach (string guid in guids)
{
string source = AssetDatabase.GUIDToAssetPath(guid);
listMatrials.Add(source);
}
}
}
// Material
public static void BegainCheckMaterials(string materialPath)
{
Material mat = AssetDatabase.LoadAssetAtPath(materialPath);
if (mat.shader.name == selectedShaderName)
{
listTargetMaterial.Add(materialPath);
}
}
public static void PrintToTxt()
{
// shader
listTargetMaterial.Add(selectedShaderName);
FileInfo fi = new FileInfo(Application.dataPath + "/Materials.txt");
if (!fi.Exists)
{
fi.CreateText();
}
else
{
StreamWriter sw = new StreamWriter(Application.dataPath + "/Materials.txt");
for (int i = 0; i < listTargetMaterial.Count - 1; i++)
{
sb.Append(listTargetMaterial[i] + "
");
}
string useNum = string.Format(" {0} Material :{1}", listTargetMaterial.Count - 1, selectedShaderName);
sb.Append(useNum + "
");
sb.Append(" shader :" + selectedShaderName);
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
sw.Dispose();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
photonnetwork.instantiate에서 gamepobject 유형을 생성 한 다음 상태 및 값을 참조하는 방법주로 마지막 기사에서 일어난 일의 수정입니다. 지난번↓ 그럼 주제입니다. (타이틀이 정리되어 없어서 죄송합니다) 우선 전회의 Illegal view ID:0입니다만 photonnetwork.instantiate를 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.