游戏开发的时候有很多常用的功能,比如遍历目录下文件等。很多时候大家会自己写...好一点的会写到项目的库里面,差一点的可能各个源文件中到处都是。但是其实系统库中已经提供了不少现成的。另外感觉C#的系统库真的很不错,像C++之类的风格一般是系统库提供低级api,开发者总需要自己二次开发定制自己的方案,而C#已经积累了足够经验直接给最佳实践了。
这里是一些汇总,基于Unity3d以及C#,慢慢汇总,不断更新。
有些API属于Unity,另一些属于C#
文件-资源-路径-场景树系统
路径系统
下面的操作已经是最简的单函数调用。
- Directory.GetFiles() // 获得path下文件列表。Directory下还有一些做其他遍历功能的函数。
- Path.GetFileName() // 最简单的从路径中取出文件名的方法,比手写的字符串搜索斜杠直接很多。Path下面还有好多类似作用的函数
- Path.GetFileNameWithoutExtension()
- Path.GetDirectoryName() // 用于找到上一级目录。
- AssetDatabase.GetAssetPath() // 获取UnityEngine.Object的文件路径,如果资源不是永久性资源(即没有对应文件)则返回""。
System.IO.Path类用于路径字符串解析。可以解析文件名、扩展名以及向找到上一级文件夹之类的操作。
在做编辑器插件的时候,可以用AssetDatabase.GetAssetPath()用来获得用户选中文件夹路径,进而可以实现文件夹批操作的功能。
文件路径对应的URL
www系统等使用uri。他们接受"file://"开头指定的本机文件。
file是一种uri格式,规则可以阅读http://en.wikipedia.org/wiki/File_URI_scheme
简而言之,下面操作可以将一个本地路径转换为uri,貌似没看见API:
- "file:///" + Path.GetFullPath( path ); // 貌似uri不支持相对路径?所以先取绝对路径。严格版本来说file那里是三个斜杠。
文件读取和资源导入
下面操作已经是最简的单函数调用,但是不支持webplayer。
- File.ReadAllBytes() // 直接读取文件中所有字节,下面俩个类似。注意发布为webplayer时这个默认没有这个api。
- File.ReadAllText()
- File.ReadAllLines()
C#直接提供了这些操作,现在大部分情况下根本不需要从File或者Stream级封装读取函数了。不过webplayer为了减小下载量,没带上这族API,具体可以参考Unity3d兼容性列表。mobile默认支持这些api。