Unity3D 编辑器扩展 强大的OnValidate

需要验证一些数据

我们都知道,搭建创建的编辑器扩展脚本,基本上都是给关卡设计或者策划人员用的。在编译游戏的时候对他们输入的一些数值进行校验,是一个好的习惯。他们不需要关心一些数值的限制,但是作为开发人员的我们是需要的。

如何使用OnValidate?

在官方文档上仅有一个简短的说明,并且没有示例代码。
编辑器模式下OnValidate 仅在下面两种情况下被调用:

  • 脚本被加载时
  • Inspector 中的任何值被修改时
    下面是脚本中如何使用它:
using UnityEngine;
using System.Collections;

public class OnValidateExample : MonoBehaviour {
    public int size;

    void OnValidate() {
        Debug.Log("OnValidate");
    }
}

上面的脚本挂在gameobject上,效果如下


OnValidate-simple-behavior.gif

Examples

下面是一些体现OnValidate函数强大功能的使用场景

  • 角度简化

使用场景 - 我们需要将设计人员输入的角度限定在-359到359之间,因为360 相当于 0度。

using UnityEngine;
using System.Collections;
 
public class OnValidateExample : MonoBehaviour {
    public float objectRotation;
 
    void OnValidate() {
        // objectRotation
        objectRotation = objectRotation % 360;
    }
}

效果如下:


OnValidate-Degree-simplification.gif
  • 二次方

使用场景 - 当需要设计人员输入 16 到 4096 之间 2的整数次幂时
Unity提供了ClosestPowerOfTwo函数,方便我们取得最接近的值。同时我们使用RangeAttribute 属性来限定一下输入数值的区间,同时能更好的看出来处理后的值跟原始输入值的区别。

using UnityEngine;
using System.Collections;
 
public class OnValidateExample : MonoBehaviour {
    [RangeAttribute(16, 4096)]
    public int textureSize;
 
    void OnValidate() {
        // textureSize
        textureSize = Mathf.ClosestPowerOfTwo(textureSize);
    }
}

效果如下


OnValidate-Power-of-two.gif
  • 关联值

使用场景 -需要“Nitro”车的速度比其他车的速度大至少20mph.

using UnityEngine;
using System.Collections;
 
public class OnValidateExample : MonoBehaviour {
    [RangeAttribute(10, 300)] [Tooltip("mph")]
    public int maxCarSpeed;
    [RangeAttribute(10, 300)] [Tooltip("mph")]
    public int maxNitroSpeed;
 
    const int minNitroSpeedExtra = 20;
 
    void OnValidate() {
        // speed check
        if (maxNitroSpeed < maxCarSpeed + minNitroSpeedExtra)
            maxNitroSpeed = maxCarSpeed + minNitroSpeedExtra;
    }
}

效果如下


OnValidate-Linked-values.gif

from:http://cjf.in.ua/812-unity-editor-extensions-the-power-of-onvalidate/

Unity技术交流 微信公众号 UnityAsk,QQ群:891920228


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容