[程式] 关于程式中发生的例外问题-Unity为例

楼主: yan04870449 (杨伯)   2014-02-20 16:19:06
请教一下大家对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:00
try catch写log
作者: Kagami3421 (卡加米)   2014-02-20 18:24:00
同楼上
作者: azureblaze (AzureBlaze)   2014-02-20 19:07:00
会丢exception就是有人帮你检查了,自己先检查没意义如果是可以处理的就把他catch起来 不行就丢给editor吧
作者: killman (天下第一人)   2014-02-21 22:44:00
callstack不会告诉你是谁忘了把door assign值try catch和检查如果没做,只要一个人做错资料全部人都停摆,你想选哪一种
作者: Ebergies (火神)   2014-02-22 20:10:00
我觉得你要先了解 Exception 的意义如果 door 在你的正常处理流程上会有 null 的可能性那么你就该使用 if 去判断至于如果它是不正常的, 那么就在可以处理的人那里 catch这个 "可以处理的人" 在开发期间通常都是 Unity Editor
楼主: yan04870449 (杨伯)   2014-02-23 23:08:00
感谢E大,我想知道的就是您最后一句话,让Editor来当catch是不是正常的,按你的说法,这似乎是合理的现象
作者: Ebergies (火神)   2014-02-25 17:26:00
要注意 "开发期间" 喔!

Links booklink

Contact Us: admin [ a t ] ucptt.com