unity的 断言 Unity 5.1 Assertion Library

孙广东  2015.12.21


当你建立Unity 的手机游戏你最可能渴望设置Script Call Optimization为Fast But No Exceptions,只要你相信你能做到。
Fast But No Exceptions是隐藏在Edit -> Project Settings -> Player menu (Other Settings/Optimization section)。通过选择此选项您的代码将会去除异常处理代码,而得到更好的性能。通过启用此选项 你将带着很大风险。从现在起,任何异常会使你的游戏立即崩溃,你甚至不知道原因是什么。
你可能想要启用 Fast But No Exceptions选项,只有当你确信你的游戏不会抛出一个单一的异常。此外,如果你不是唯一的人在该项目中工作,风险就更大。
不要假设任何事情
不要假设你的脚本设置正确。要做一个悲观主义者,无时无刻都在想的最坏的情况。让我们以这个脚本为例:


public class Plane : MonoBehaviour {
    public Airport airport;

    void Update() {
        if (Vector3.Distance(airport.transform.position, transform.position) < 1000) {
            Land();
        }
    }

    // ...
}


这是一个非常基本的例子,关于如何与机场飞机进行交互。我想你已经知道要说什么。此代码如果没有Airport将会中断。这是,我们假设在场景工作的人会仔细,连接对象之间的所有引用的情况。但它不是那么容易,因为他们不连接的所有引用Unity不会给任何人的任何错误或警告,除非他们运行Scene,看到的异常。



好吧,我们试着让这个脚本更有自我意识。我们希望它有点毛病时发出声音。为了做到这一点,我将使用 MonoBehaviour.OnValidate() 消息
OnValidate() 被调用的情形是:

• 在 编辑器不需要进入play 模式
• 任何脚本值更改时
• 场景scene 加载时


因此,该脚本可能现在看起来像这样:

public class Plane : MonoBehaviour {
    public Airport airport;

    void OnValidate() {
        if (airport == null) {
            Debug.LogError("Airport is set to null", this);
        }
    }

    void Update() {
        if (Vector3.Distance(airport.transform.position, transform.position) < 1000) {
            Land();
        }
    }

    // ...
}

这将打印错误消息到控制台,playing你的游戏在编辑器中,并在大多数情况下,这将是足够了。然而,你也可能想要在运行时 检查是否airport为 null (OnValidate()函数仅在编辑器中工作) 。

public class Plane : MonoBehaviour {
    public Airport airport;

    void OnValidate() {
        CommonValidate();
    }

    void Update() {
        CommonValidate();

        if (Vector3.Distance(airport.transform.position, transform.position) < 1000) {
            Land();
        }
    }

    void Com
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值