由于Unity3D在浏览器中通过WebGL的工作方式,try / catch的捕获部分会立即导致游戏崩溃。这主要是因为它不支持发布版本。 (有调试版本可以使用try / catch,但这也会产生影响) 最后,我必须重构一些代码,不使用任何try / catch,以防止它为用户锁定。
以下是我目前的情况:
try{
using (StreamReader reader = new StreamReader(Application.persistentDataPath+"/"+"CHARVER.BIN"))
{
JSONNode characterImages;
string json = reader.ReadToEnd();
if(string.IsNullOrEmpty(json)){
throw new System.IO.FileNotFoundException();
}else{
characterImages = JSON.Parse(json);
//test the image file inside
Texture2D loadedImage = new Texture2D(1,1,TextureFormat.ARGB32,false);
try{
loadedImage.LoadImage(File.ReadAllBytes(Application.persistentDataPath + characterImages ["Characters"][0]["texture"]));
if(!loadedImage){
throw new System.IO.FileNotFoundException();
}
}
catch(System.Exception ex){
Debug.LogError("[DOWNLOAD]Test image file was not found: "+ex);
ThrowBackToLogin("No image file was found.");
yield break;
}
}
}
}catch(System.Exception ex){
Debug.Log("[DOWNLOAD]Test file was not found: "+ex);
ThrowBackToLogin("No version file found.");
yield break;
}
我怎么能重构这个以删除try-catch部分?我不可能手动避免File.RealAllBytes可以向我抛出的所有异常,对吧?我可以想象只是调用一个“异常消息”方法来接收消息并响应失败的检查并“返回”;紧接着,(以替换抛出新的System.IO.FileNotFoundException();)因为我自己抛出它。但是,对于我无法控制的更先进的方法,它是如何工作的?
提前致谢 -Smiley
答案 0 :(得分:1)
好的呢?
using (StreamReader reader = new StreamReader(Application.persistentDataPath+"/"+"CHARVER.BIN"))
{
JSONNode characterImages;
string json = reader.ReadToEnd();
if(!string.IsNullOrEmpty(json))
{
characterImages = JSON.Parse(json);
//test the image file inside
Texture2D loadedImage = new Texture2D(1,1,TextureFormat.ARGB32,false);
if(characterImages.Keys.Contains("Characters")
&& characterImages["Characters"].Count() > 0
&& characterImages["Characters"][0].Keys.Contains("texture"))
{
if(loadedImage.LoadImage(File.ReadAllBytes(Application.persistentDataPath + characterImages["Characters"][0]["texture"])))
return;
}
}
ThrowBackToLogin("No image file was found.");
}