unity3d guisb3utilitygui汉化版.begingui 的gc怎么清除

(非注册用户请填昵称)
(非注册用户请留空)
您还没有登录,请或unity3d 报误怎么解决?_百度知道这个插件是我在国外网站逛论坛发现的,试用了一下非常好用,是一个轻量级的插件就一个类。开发中尤其是和美术合作的时候,可能你会发现Project视图中有很多没有用到的资源,但是你又不敢删除,因为你不知道那些资源是没用到的,那些资源是用到的。这时候ResourceChecker可以帮上大忙。
gitHub地址:
将ResourceChecker放在Project视图中的Editor文件夹中,如果没有该文件夹就创建一个。如下图所示,在Unity导航菜单栏中选择 Windows -& Resource Checker 即可呼出窗口。
在Textures选项卡最下面点击 Select Al l 可在Project视图中展开目录结构,这时候你删除没有选中的文件就可以。。&
定位贴图、材质、网格。定位所有文件,总这这个小插件你值得拥有!
代码如下:
using UnityE
using UnityE
using System.Collections.G
public class TextureDetails
public bool isCubeM
public int memSizeKB;
publicTextureF
public int mipMapC
public List&Object& FoundInMaterials=new List&Object&();
public List&Object& FoundInRenderers=new List&Object&();
public TextureDetails()
public class MaterialDetails
public List&Renderer& FoundInRenderers=new List&Renderer&();
public MaterialDetails()
public class MeshDetails
public List&MeshFilter& FoundInMeshFilters=new List&MeshFilter&();
public List&SkinnedMeshRenderer& FoundInSkinnedMeshRenderer=new List&SkinnedMeshRenderer&();
public MeshDetails()
publicclass ResourceChecker : EditorWindow {
string[] inspectToolbarStrings = {"Textures", "Materials","Meshes"} ;
enum InspectType&
Textures,Materials,Meshes
InspectType ActiveInspectType=InspectType.T
float ThumbnailWidth=40;
float ThumbnailHeight=40;
List&TextureDetails& ActiveTextures=new List&TextureDetails&();
List&MaterialDetails& ActiveMaterials=new List&MaterialDetails&();
List&MeshDetails& ActiveMeshDetails=new List&MeshDetails&();
Vector2 textureListScrollPos=new Vector2(0,0);
Vector2 materialListScrollPos=new Vector2(0,0);
Vector2 meshListScrollPos=new Vector2(0,0);
int TotalTextureMemory=0;
int TotalMeshVertices=0;
bool ctrlPressed=
static int MinWidth=455;
& & [MenuItem ("Window/Resource Checker")]
& & static void Init ()
& & & & ResourceChecker window = (ResourceChecker) EditorWindow.GetWindow (typeof (ResourceChecker));
window.CheckResources();
window.minSize=new Vector2(MinWidth,300);
& & void OnGUI ()
if (GUILayout.Button("Refresh")) CheckResources();
GUILayout.BeginHorizontal();
GUILayout.Label("Materials "+ActiveMaterials.Count);
GUILayout.Label("Textures "+ActiveTextures.Count+" - "+FormatSizeString(TotalTextureMemory));
GUILayout.Label("Meshes "+ActiveMeshDetails.Count+" - "+TotalMeshVertices+" verts");
GUILayout.EndHorizontal();
ActiveInspectType=(InspectType)GUILayout.Toolbar((int)ActiveInspectType,inspectToolbarStrings);
ctrlPressed=Event.current.control ||
switch (ActiveInspectType)
case InspectType.Textures:
ListTextures();
case InspectType.Materials:
ListMaterials();
case InspectType.Meshes:
ListMeshes();
int GetBitsPerPixel(TextureFormat format)
switch (format)
caseTextureFormat.Alpha8: // Alpha-only texture format.
caseTextureFormat.ARGB4444: // A 16 bits/pixel texture format. Texture stores color with an alpha channel.
return 16;
caseTextureFormat.RGB24:// A color texture format.
return 24;
caseTextureFormat.RGBA32://Color with an alpha channel texture format.
return 32;
caseTextureFormat.ARGB32://Color with an alpha channel texture format.
return 32;
caseTextureFormat.RGB565:// A 16 bit color texture format.
return 16;
caseTextureFormat.DXT1:// Compressed color texture format.
caseTextureFormat.DXT5:// Compressed color with alpha channel texture format.
caseTextureFormat.WiiI4:// Wii texture format.
caseTextureFormat.WiiI8:// Wii texture format. Intensity 8 bit.
caseTextureFormat.WiiIA4:// Wii texture format. Intensity + Alpha 8 bit (4 + 4).
caseTextureFormat.WiiIA8:// Wii texture format. Intensity + Alpha 16 bit (8 + 8).
caseTextureFormat.WiiRGB565:// Wii texture format. RGB 16 bit (565).
caseTextureFormat.WiiRGB5A3:// Wii texture format. RGBA 16 bit (4443).
caseTextureFormat.WiiRGBA8:// Wii texture format. RGBA 32 bit (8888).
caseTextureFormat.WiiCMPR:// Compressed Wii texture format. 4 bits/texel, ~RGB8A1 (Outline alpha is not currently supported).
return0;& //Not supported yet
caseTextureFormat.PVRTC_RGB2:// PowerVR (iOS) 2 bits/pixel compressed color texture format.
caseTextureFormat.PVRTC_RGBA2:// PowerVR (iOS) 2 bits/pixel compressed with alpha channel texture format
caseTextureFormat.PVRTC_RGB4:// PowerVR (iOS) 4 bits/pixel compressed color texture format.
caseTextureFormat.PVRTC_RGBA4:// PowerVR (iOS) 4 bits/pixel compressed with alpha channel texture format
caseTextureFormat.ETC_RGB4:// ETC (GLES2.0) 4 bits/pixel compressed RGB texture format.
caseTextureFormat.ATC_RGB4:// ATC (ATITC) 4 bits/pixel compressed RGB texture format.
caseTextureFormat.ATC_RGBA8:// ATC (ATITC) 8 bits/pixel compressed RGB texture format.
caseTextureFormat.BGRA32:// Format returned by iPhone camera
return 32;
caseTextureFormat.ATF_RGB_DXT1:// Flash-specific RGB DXT1 compressed color texture format.
caseTextureFormat.ATF_RGBA_JPG:// Flash-specific RGBA JPG-compressed color texture format.
caseTextureFormat.ATF_RGB_JPG:// Flash-specific RGB JPG-compressed color texture format.
return0; //Not supported yet
int CalculateTextureSizeBytes(Texture tTexture)
int tWidth=tTexture.
int tHeight=tTexture.
if (tTexture is Texture2D)
Texture2D tTex2D=tTexture as Texture2D;
int bitsPerPixel=GetBitsPerPixel(tTex2D.format);
int mipMapCount=tTex2D.mipmapC
int mipLevel=1;
int tSize=0;
while (mipLevel&=mipMapCount)
tSize+=tWidth*tHeight*bitsPerPixel/8;
tWidth=tWidth/2;
tHeight=tHeight/2;
mipLevel++;
if (tTexture is Cubemap)
Cubemap tCubemap=tTexture as C
int bitsPerPixel=GetBitsPerPixel(tCubemap.format);
return tWidth*tHeight*6*bitsPerPixel/8;
void SelectObject(Object selectedObject,bool append)
if (append)
List&Object& currentSelection=new List&Object&(Selection.objects);
// Allow toggle selection
if (currentSelection.Contains(selectedObject)) currentSelection.Remove(selectedObject);
else currentSelection.Add(selectedObject);
Selection.objects=currentSelection.ToArray();
else Selection.activeObject=selectedO
void SelectObjects(List&Object& selectedObjects,bool append)
if (append)
List&Object& currentSelection=new List&Object&(Selection.objects);
currentSelection.AddRange(selectedObjects);
Selection.objects=currentSelection.ToArray();
else Selection.objects=selectedObjects.ToArray();
void ListTextures()
textureListScrollPos = EditorGUILayout.BeginScrollView(textureListScrollPos);
foreach (TextureDetails tDetails in ActiveTextures)
GUILayout.BeginHorizontal ();
GUILayout.Box(tDetails.texture, GUILayout.Width(ThumbnailWidth), GUILayout.Height(ThumbnailHeight));
if(GUILayout.Button(tDetails.texture.name,GUILayout.Width(150)))
SelectObject(tDetails.texture,ctrlPressed);
string sizeLabel=""+tDetails.texture.width+"x"+tDetails.texture.
if (tDetails.isCubeMap) sizeLabel+="x6";
sizeLabel+=" - "+tDetails.mipMapCount+"mip";
sizeLabel+="\n"+FormatSizeString(tDetails.memSizeKB)+" - "+tDetails.format+"";
GUILayout.Label (sizeLabel,GUILayout.Width(120));
if(GUILayout.Button(tDetails.FoundInMaterials.Count+" Mat",GUILayout.Width(50)))
SelectObjects(tDetails.FoundInMaterials,ctrlPressed);
if(GUILayout.Button(tDetails.FoundInRenderers.Count+" GO",GUILayout.Width(50)))
List&Object& FoundObjects=new List&Object&();
foreach (Renderer renderer in tDetails.FoundInRenderers) FoundObjects.Add(renderer.gameObject);
SelectObjects(FoundObjects,ctrlPressed);
GUILayout.EndHorizontal();
if (ActiveTextures.Count&0)
GUILayout.BeginHorizontal ();
GUILayout.Box(" ",GUILayout.Width(ThumbnailWidth),GUILayout.Height(ThumbnailHeight));
if(GUILayout.Button("Select All",GUILayout.Width(150)))
List&Object& AllTextures=new List&Object&();
foreach (TextureDetails tDetails in ActiveTextures) AllTextures.Add(tDetails.texture);
SelectObjects(AllTextures,ctrlPressed);
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndScrollView();
void ListMaterials()
materialListScrollPos = EditorGUILayout.BeginScrollView(materialListScrollPos);
foreach (MaterialDetails tDetails in ActiveMaterials)
if (tDetails.material!=null)
GUILayout.BeginHorizontal ();
if (tDetails.material.mainTexture!=null) GUILayout.Box(tDetails.material.mainTexture, GUILayout.Width(ThumbnailWidth), GUILayout.Height(ThumbnailHeight));
GUILayout.Box("n/a",GUILayout.Width(ThumbnailWidth),GUILayout.Height(ThumbnailHeight));
if(GUILayout.Button(tDetails.material.name,GUILayout.Width(150)))
SelectObject(tDetails.material,ctrlPressed);
string shaderLabel = tDetails.material.shader != null ? tDetails.material.shader.name : "no shader";
GUILayout.Label (shaderLabel, GUILayout.Width(200));
if(GUILayout.Button(tDetails.FoundInRenderers.Count+" GO",GUILayout.Width(50)))
List&Object& FoundObjects=new List&Object&();
foreach (Renderer renderer in tDetails.FoundInRenderers) FoundObjects.Add(renderer.gameObject);
SelectObjects(FoundObjects,ctrlPressed);
GUILayout.EndHorizontal();
EditorGUILayout.EndScrollView();
void ListMeshes()
meshListScrollPos = EditorGUILayout.BeginScrollView(meshListScrollPos);
foreach (MeshDetails tDetails in ActiveMeshDetails)
if (tDetails.mesh!=null)
GUILayout.BeginHorizontal ();
if (tDetails.material.mainTexture!=null) GUILayout.Box(tDetails.material.mainTexture, GUILayout.Width(ThumbnailWidth), GUILayout.Height(ThumbnailHeight));
GUILayout.Box("n/a",GUILayout.Width(ThumbnailWidth),GUILayout.Height(ThumbnailHeight));
if(GUILayout.Button(tDetails.mesh.name,GUILayout.Width(150)))
SelectObject(tDetails.mesh,ctrlPressed);
string sizeLabel=""+tDetails.mesh.vertexCount+" vert";
GUILayout.Label (sizeLabel,GUILayout.Width(100));
if(GUILayout.Button(tDetails.FoundInMeshFilters.Count + " GO",GUILayout.Width(50)))
List&Object& FoundObjects=new List&Object&();
foreach (MeshFilter meshFilter in tDetails.FoundInMeshFilters) FoundObjects.Add(meshFilter.gameObject);
SelectObjects(FoundObjects,ctrlPressed);
if(GUILayout.Button(tDetails.FoundInSkinnedMeshRenderer.Count + " GO",GUILayout.Width(50)))
List&Object& FoundObjects=new List&Object&();
foreach (SkinnedMeshRenderer skinnedMeshRenderer in tDetails.FoundInSkinnedMeshRenderer) FoundObjects.Add(skinnedMeshRenderer.gameObject);
SelectObjects(FoundObjects,ctrlPressed);
GUILayout.EndHorizontal();
EditorGUILayout.EndScrollView();
string FormatSizeString(int memSizeKB)
if (memSizeKB&1024) return ""+memSizeKB+"k";
float memSizeMB=((float)memSizeKB)/1024.0f;
return memSizeMB.ToString("0.00")+"Mb";
TextureDetails FindTextureDetails(Texture tTexture)
foreach (TextureDetails tTextureDetails in ActiveTextures)
if (tTextureDetails.texture==tTexture) return tTextureD
MaterialDetails FindMaterialDetails(Material tMaterial)
foreach (MaterialDetails tMaterialDetails in ActiveMaterials)
if (tMaterialDetails.material==tMaterial) return tMaterialD
MeshDetails FindMeshDetails(Mesh tMesh)
foreach (MeshDetails tMeshDetails in ActiveMeshDetails)
if (tMeshDetails.mesh==tMesh) return tMeshD
void CheckResources()
ActiveTextures.Clear();
ActiveMaterials.Clear();
ActiveMeshDetails.Clear();
Renderer[] renderers = (Renderer[]) FindObjectsOfType(typeof(Renderer));
//Debug.Log("Total renderers "+renderers.Length);
foreach (Renderer renderer in renderers)
//Debug.Log("Renderer is "+renderer.name);
foreach (Material material in renderer.sharedMaterials)
MaterialDetails tMaterialDetails=FindMaterialDetails(material);
if (tMaterialDetails==null)
tMaterialDetails=new MaterialDetails();
tMaterialDetails.material=
ActiveMaterials.Add(tMaterialDetails);
tMaterialDetails.FoundInRenderers.Add(renderer);
foreach (MaterialDetails tMaterialDetails in ActiveMaterials)
Material tMaterial=tMaterialDetails.
foreach (Object obj in EditorUtility.CollectDependencies(new UnityEngine.Object[] {tMaterial}))
if (obj is Texture)
Texture tTexture=obj as T
TextureDetails tTextureDetails=FindTextureDetails(tTexture);
if (tTextureDetails==null)
tTextureDetails=new TextureDetails();
tTextureDetails.texture=tT
tTextureDetails.isCubeMap=tTexture is C
int memSize=CalculateTextureSizeBytes(tTexture);
tTextureDetails.memSizeKB=memSize/1024;
TextureFormat tFormat=TextureFormat.RGBA32;
int tMipMapCount=1;
if (tTexture is Texture2D)
tFormat=(tTexture as Texture2D).
tMipMapCount=(tTexture as Texture2D).mipmapC
if (tTexture is Cubemap)
tFormat=(tTexture as Cubemap).
tTextureDetails.format=tF
tTextureDetails.mipMapCount=tMipMapC
ActiveTextures.Add(tTextureDetails);
tTextureDetails.FoundInMaterials.Add(tMaterial);
foreach (Renderer renderer in tMaterialDetails.FoundInRenderers)
if (!tTextureDetails.FoundInRenderers.Contains(renderer)) tTextureDetails.FoundInRenderers.Add(renderer);
MeshFilter[] meshFilters = (MeshFilter[]) FindObjectsOfType(typeof(MeshFilter));
foreach (MeshFilter tMeshFilter in meshFilters)
Mesh tMesh=tMeshFilter.sharedM
if (tMesh!=null)
MeshDetails tMeshDetails=FindMeshDetails(tMesh);
if (tMeshDetails==null)
tMeshDetails=new MeshDetails();
tMeshDetails.mesh=tM
ActiveMeshDetails.Add(tMeshDetails);
tMeshDetails.FoundInMeshFilters.Add(tMeshFilter);
SkinnedMeshRenderer[] skinnedMeshRenderers = (SkinnedMeshRenderer[]) FindObjectsOfType(typeof(SkinnedMeshRenderer));
foreach (SkinnedMeshRenderer tSkinnedMeshRenderer in skinnedMeshRenderers)
Mesh tMesh=tSkinnedMeshRenderer.sharedM
if (tMesh!=null)
MeshDetails tMeshDetails=FindMeshDetails(tMesh);
if (tMeshDetails==null)
tMeshDetails=new MeshDetails();
tMeshDetails.mesh=tM
ActiveMeshDetails.Add(tMeshDetails);
tMeshDetails.FoundInSkinnedMeshRenderer.Add(tSkinnedMeshRenderer);
TotalTextureMemory=0;
foreach (TextureDetails tTextureDetails in ActiveTextures) TotalTextureMemory+=tTextureDetails.memSizeKB;
TotalMeshVertices=0;
foreach (MeshDetails tMeshDetails in ActiveMeshDetails) TotalMeshVertices+=tMeshDetails.mesh.vertexC
// Sort by size, descending
ActiveTextures.Sort(delegate(TextureDetails details1, TextureDetails details2) {return details2.memSizeKB-details1.memSizeKB;});
ActiveMeshDetails.Sort(delegate(MeshDetails details1, MeshDetails details2) {return details2.mesh.vertexCount-details1.mesh.vertexC});
阅读(...) 评论()Unity3d的GUI排版教程(连载)3
在上一节GUILayout.BeginArea、GUILayout.BeginVertical、GUILayout.BeginHorizontal这三大要素,下面我讲用这三大要素来进行一次经典的横、纵、横式布局排版,布局格式如下图所示:
接着代码如下所示:
GUILayout.BeginArea(new Rect(10, 10, 300, 300));
GUILayout.Button("A");
GUILayout.BeginHorizontal("", GUILayout.Width(290));
GUILayout.BeginVertical("",GUILayout.Width(250));
GUILayout.Button("B1");
GUILayout.Button("B2");
GUILayout.Button("B3");
GUILayout.Button("B4");
GUILayout.Button("B5");
GUILayout.EndVertical();
GUILayout.Button("D", GUILayout.Height(120));
GUILayout.EndHorizontal();
GUILayout.Button("C");
GUILayout.EndArea();
运行效果如下图所示:
这 里我们先用GUILayout.BeginArea卡住了按钮的区域的位置和大小,生下来就是在该区域进行内部编排了。其中
GUILayout.Width是限定内部块的宽度,GUILayout.Height(120)是限定内部块的高度。剩下来我在下一节,将给按钮添加特定样式,让后各个块显示各自的区域背景,然后利用Padding、Margin以及GUILayout.Space来调整内部板式各个块之间的间距。
本教程为原创,转载请著名出处。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 sb3utilitygui教程 的文章

 

随机推荐