???????
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 目录,然后在该目录进行文件系统的读写。
|