请教一下大家对Unity(C#)中的Exception都是怎么的处理方法?
public class Car : MonoBehaviour
{
//车门的物件
public GameObject door = null;
void Start()
{
//从门物件中找到脚本,并关起门来
door.getComponent<Door>().Close();
}
}
以这段程式码为例,在Unity之下可能在两个地方发生
NullReferenceException,但是真的有必要在使用之前
去检查物件或脚本取出来是不是为null吗?
我之所以会这样问是因为,Editor会在run time出错的
时候告诉我哪边发生Exception,堆叠会告诉我一切,这
样我马上就知道哪边有问题,但是如果我写了检查变成
像下面这样
void Start()
{
if(door == null)
Debug.Error("door is null");
var _Com = door.getComponent<Door>();
if(_Com == null) reutrn ;
_Com.Close();
}
我做了两种例外的处理,第一种是抛Unity的Error,但这跟
Exception没什么差别,Exception还不见了,变成一个"讯息"
第二种是不处理,就直接return避免跳Exception或是造成游戏
异常的崩馈,但这样就好像只是骗自己这边没问题一样,但事实
上就是"车门没关"....
但是两种比较起来,好像都没有比较好,还是说一般例外根本
不能这样处理,是我观念一直错误?
到目前为止,比较能说服我自己的想法就是保持原样,因为我在开
发阶段靠Exception跟堆叠很快就可以让我找到问题,并且修改。
想跟大家讨论在这方面都是怎么处理?
作者:
Ansaga (奈灿)
2014-02-20 16:42:00try catch写log
会丢exception就是有人帮你检查了,自己先检查没意义如果是可以处理的就把他catch起来 不行就丢给editor吧
作者: killman (天下第一人) 2014-02-21 22:44:00
callstack不会告诉你是谁忘了把door assign值try catch和检查如果没做,只要一个人做错资料全部人都停摆,你想选哪一种
我觉得你要先了解 Exception 的意义如果 door 在你的正常处理流程上会有 null 的可能性那么你就该使用 if 去判断至于如果它是不正常的, 那么就在可以处理的人那里 catch这个 "可以处理的人" 在开发期间通常都是 Unity Editor
感谢E大,我想知道的就是您最后一句话,让Editor来当catch是不是正常的,按你的说法,这似乎是合理的现象