/// <summary>
/// 使用UnityWebRequest读取本地JSON文件
/// </summary>
/// <typeparam name="T">承载JSON形式的集合</typeparam>
/// <param name="platform">运行平台,支持安卓,PC,IOS三种</param>
/// <param name="url">本地文件地址</param>
/// <returns>T集合</returns>
public async Task<T> ReadLocalJson<T>(RuntimePlatform platform,string url)where T:ICollection
{
UnityWebRequest unityWebRequest = UnityWebRequest.Get(GetLocalUrl(platform, url));
await unityWebRequest.SendWebRequest();
if (unityWebRequest.result == UnityWebRequest.Result.ProtocolError ||
unityWebRequest.result == UnityWebRequest.Result.ConnectionError)
{
Debug.Log("error=" + unityWebRequest.error);
throw new Exception("读取JSON文件出错");
}
var uiDictionary = JsonMapper.ToObject<T>(unityWebRequest.downloadHandler.text);
return uiDictionary;
}
报错的话加入自定义的GetAwaiter扩展方法。
给UnityWebRequest添加Awaiter
- String,StringBuilder,StringBuffer
String | StringBuilder | StringBuffer | |
---|---|---|---|
线程安全 | × | × | √ |
运行速度 | 3 | 1(声明时初始化长度后更快) | 2 |
GC负担 | 非常大 | 小 | 小 |
创建 | string str=“Hello World”; | StringBuilder str = new StringBuilder(“HelloWorld”, 15); | 不知道(小声bb) |
适用场景 | 小型字符串拼接,不频繁修改的时候 | 大型字符串,频繁拼接修改读写 | 多线程频繁读写同一数据 |
写完了上面才发现编译器打不出StringBuffer,搞了半天还是Java的东西啊,不用Java的自动忽略StringBuffer吧。
- 如何防止按钮重叠被点穿(如何避免打开背包后点击物品同时点击到别的UI控件)=>UI都是以Panel为单位的,在Panel上面加个Collider覆盖上就好了
- UnityWebRequest下载本地资源不同平台前加不同前缀(WWW高版本平台已弃用)
iOS:file://+url
Android:jar:file://+url
PC:file:///+url
- Application下不同路径用法
Application.dataPath
工程路径
C:/Users/Administrator/ChatRoom/Assets
一般为了跨平台不用这个,只能在pc端使用
Application.persistentDataPath
缓存路径
C:/Users/Administrator/AppData/LocalLow/DefaultCompany/ChatRoom
用文件系统可读可写,例如File,FileStream,StreamReader,StreamWriter。
Application.streamingAssetsPath
流式资源路径
C:/Users/Administrator/ChatRoom/Assets/StreamingAssets
这个路径是只读的,只能读取不能写入,只能用UnityWebRequest访问,不能用文件系统读写。例如数据库文件可放入此文件夹,先读取再写入到Application.persistentDataPath
目录,然后在该目录进行文件系统的读写。
//IOS可以用FileStream
var fileStream = File.OpenRead(path);
//而不能用
var fileStream = new FileStream(path, FileMode.Open);
//因为FileMode.Open包括了读写权限,而streaming目录只能读
-
有动画时,相机操作需写在LateUpdate里防止相机抖动
-
UI物体上不挂载脚本时,使用此方法进行绑定拖拽等事件
/// <summary>
/// 为不挂载脚本的UI添加接口:如拖动、点击等
/// </summary>
/// <param name="go">游戏物体</param>
/// <param name="triggerType">接口类型</param>
/// <param name="