0. Asset folder的路径:Application.dataPath; 得到的是自磁盘根目录开始的路径。
0. C#自带的: string[] paths = Directory.GetFiles(Application.dataPath,"*.*",SearchOption.AllDirectories); //第三个参数可以改为SearchOption 。TopDirectoryOnly则只搜索指定的目录,不搜索下面的子目录
string[] matpaths =Directory.GetFiles(Application.dataPath,"*.mat",SearchOption.AllDirectories); //搜索Unity工程Asset目录(包括子目录)下所有的Material
1. LoadAsset
Resources.Load,只Load位于Resources文件夹及其子目录下面的Asset。 但有Resources.LoadAssetAtPath()可以Load放置于任意位置的Asset。
Resources.LoadAssetAtPath :Returns a resource at an asset path (Editor Only).
This function always return null in the standalone player or web player. This is useful for quickly accessing an asset for use in the editor only.
AssetDatabase.LoadAssetAtPath : Returns the first asset object of type type at given path assetPath.
Materialmat = (Material)Resources.LoadAssetAtPath(propermatpath,typeof(Material));
// In Editor, same with Material mat = (Material)AssetDatabase.LoadAssetAtPath(propermatpath, typeof(Material));
注意!!!! 很容易导致Load fail 的两个细节!!!
(1) Unity里的各种Load,都要求路径是相对的路径。All paths are relative to the project folder, for example: "Assets/MyTextures/hello.png".
(2) 分隔符为单个的‘/’, Windows平台也是一样。 ALL asset names & paths in Unity use forward slashes, even on Windows.
static string GetRelativeAssetPath(string _fullPath)
{
_fullPath = GetRightFormatPath(_fullPath);
int idx = _fullPath.IndexOf("Assets");
string assetRelativePath = _fullPath.Substring(idx);
return assetRelativePath;
}
static string GetRightFormatPath(string _path)
{
return _path.Replace("\\", "/");
}
2.FindObjects
GameObject[] objs = ( GameObject[])FindObjectsOfType(typeof (GameObject)); //get all gameobjects including sub_GameObject. Renderer[] renderers = (Renderer [])FindObjectsOfType<Renderer>();Object.FindObjectsOfType : Returns a list of all active loaded objects of Type type. It will return no assets (meshes, textures, prefabs, ...) or inactive objects.
Resources.FindObjectsOfTypeAll : This function can return any type of Unity object that is loaded, including game objects, prefabs, materials, meshes, textures, etc. It will also list internal stuff, therefore please be extra careful the way you handle the returned objects. Contrary to Object.FindObjectsOfType this function will also list disabled objects.
Asset的获取,以获取Material为例 Object[] selections = Selection.GetFiltered(typeof(Material),SelectionMode.TopLevel);这里获取到Material类型的Object[], 但这里并不能直接将selections强转为Material[]。 需要将这些Materail Load进内存再处理。// for me : 一个重要的思想是,不是想着有那些API,然后用API去迁就你的功能实现,而是把注意力放在功能上,让功能按照正常思维去做。按照这个方式去找合适的API。软件一般是按照人们的正常思维来设计的,所以按照这个流程,可以比较顺畅地实现功能需求。如何将Material Load进内存呢,我们知道有Resources.Load(),Resources.LoadAssetAtPath(),意味着我们需要知道AssetPath然后将之Load进来。事实上,我们得到了selections,这是Object[],由Object应该可以得到它的AssetPath吧。嗯,有的,AssetDatabase.GetAssetPath(obj.GetInstanceID()); //UnityEngine.Object里有GetInstanceID(),就是为了方便大家根据InstanceID()获取Object的各种信息吧。
小技巧:
1. 测试某些功能时,可以直接在放在任意位置的.cs文件(是的,不一定要放在Editor文件夹下)里写 [MenuItem("***")] 和相应的static函数(必须是static函数)就行了。例如: [MenuItem("IvyTrial/ClickMe")] staticvoidClickme() { Debug.Log("Click me" ); }
2. C#里写数组,Object向Object[]的转换Object[] selections =Selection.GetFiltered(typeof(Material),SelectionMode.TopLevel);foreach(Objectobjinselections){ Object[] roots = newObject[]{obj}; Object[] depends = EditorUtility .CollectDependencies(roots);}
相关文章
- Java 数据结构-特点: 代表一个队列,通常按照先进先出(FIFO)的顺序操作元素。 实现类: LinkedList, PriorityQueue, ArrayDeque。 堆(Heap) 堆(Heap)优先队列的基础,可以实现最大堆和最小堆。 PriorityQueue<Integer minHeap = new PriorityQueue<>; PriorityQueue<Integer maxHeap = new PriorityQueue<>(Collections.reverseOrder); 树(Trees) Java 提供了 TreeNode 类型,可以用于构建二叉树等数据结构。 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 图(Graphs) 图的表示通常需要自定义数据结构或使用图库,Java 没有内建的图类。 以上介绍的只是 Java 中一些常见的数据结构,实际上还有很多其他的数据结构和算法可以根据具体问题选择使用。 其他一些说明 以下这些类是传统遗留的,在 Java2 中引入了一种新的框架-集合框架(Collection),我们后面再讨论。 枚举(Enumeration) 枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。 例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。 关于枚举接口的更多信息,请参见枚举(Enumeration)。 位集合(BitSet) 位集合类实现了一组可以单独设置和清除的位或标志。 该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。 关于该类的更多信息,请参见位集合(BitSet)。 向量(Vector) 向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。 和数组一样,Vector对象的元素也能通过索引访问。 使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。 关于该类的更多信息,请参见向量(Vector) 栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构。 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。 当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。 关于该类的更多信息,请参见栈(Stack)。 字典(Dictionary) 字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。 当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用 Dictionary。 由于 Dictionary 类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。 关于该类的更多信息,请参见字典( Dictionary)。 Dictionary 类在较新的 Java 版本中已经被弃用(deprecated),推荐使用 Map 接口及其实现类,如 HashMap、TreeMap 等,来代替 Dictionary。
- Unity里常用的一些路径等信息
- Web应用在Spring管理的Bean类里得到上下文信息:路径等
- Unity里常用的一些路径等信息
- Unity里常用的一些路径等信息
- Unity里常用的一些路径等信息