unity的 断言 Unity 5.1 Assertion Library

本文介绍了在Unity中使用断言(Assert)来增强代码的安全性和稳定性,特别是在启用Fast But No Exceptions优化选项时。通过示例展示了如何在脚本中使用Assert.IsNotNull()进行null检查,以及Unity 5.1引入的新assertion library。还提到了在不同构建模式下断言的行为,并推荐使用MustExtensions以提高可读性。
摘要由CSDN通过智能技术生成

孙广东  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();
        }
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值