需要验证一些数据

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

如何使用OnValidate?

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

  • 脚本被加载时
  • Inspector 中的任何值被修改时
    下面是脚本中如何使用它:
using UnityEngine;
using System.Collections;public class OnValidateExample : MonoBehaviour {public int size;void OnValidate() {Debug.Log("OnValidate");}
}

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

Examples

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

  • 角度简化

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

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

效果如下:

  • 二次方

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

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

效果如下

  • 关联值

使用场景 -需要“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 checkif (maxNitroSpeed < maxCarSpeed + minNitroSpeedExtra)maxNitroSpeed = maxCarSpeed + minNitroSpeedExtra;}
}

效果如下

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

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

Unity3D 编辑器扩展 强大的OnValidate相关推荐

  1. 【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  2. Unity3D编辑器扩展--自定义创建圆锥体

    前言 这几天琢磨着开发个个人作品的时候,发现原来Unity3D官方没有提供圆锥体的创建功能,就自己做了个编辑器扩展.鉴于之前搜索Mesh编程的时候很少有博客把自己的算法讲清楚,这里我抛砖引玉,尽我所能 ...

  3. Unity3D 编辑器扩展 跳转显示指定目录

    做编辑器扩展开发时,假如我们生成一个文件到Assets之外的目录,要查看它的时候,需要从系统路径一步步打开到那个目录. Unity给我们提供了一个API可以直接打开指定目录,类似Project窗口右键 ...

  4. 【Unity3D编辑器扩展】Unity3D中实现UI界面控制,UI界面的显示和隐藏实现

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  5. unity3D编辑器扩展

    编辑器扩展只是在编辑项目中运行,发布出来是不会运行的. 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去. 01.使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用 ...

  6. Unity3D编辑器扩展1——批量处理资源

    前言 最近一段时间正在学习Unity的编辑器扩展方面的内容,因此想把所学到的知识以一种方式记录下来.有可能有很多不足的地方,甚至有错误的地方,请大佬们多多提供帮助. 什么是编辑器扩展 先说说什么是编辑 ...

  7. unity3D 编辑器扩展,设置应用图标

    Unity 2018的Android平台Icon怎样设置,自己打开Unity去看下: File->Build Settings->Player Settings->android 平 ...

  8. Unity3D使用经验总结 编辑器扩展篇【转】

    一个引擎,最重要的就是工具,工具除了提升开发速度,提供可视化操作环境以外,还带了容错功能. 它使得大家的工作局限在一定的范围内,比如一个变量的配置,或者是一些类型的选择. 使用编辑器,使得既使不太明白 ...

  9. Unity3D Editor 编辑器扩展3 Editor脚本

    Unity3D Editor 编辑器扩展3 Editor脚本 环境:Unity2017.2 语言:C# 总起: 在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参 ...

  10. 扩展Unity3d编辑器,批量修改Label字体颜色

    在做游戏使用NGUI过程中,经常会遇到更改UILabel字体的颜色,手动更改Label字体颜色不仅效率很低,而且有部分Label处于未激活状态,无法找到全部Label.为此需要扩展Unity3d编辑器 ...

最新文章

  1. 怎么通过ip连接oracle,Oracle 无法通过IP连接问题
  2. 代码详解|tensorflow实现 聊天AI--PigPig养成记(1)
  3. 谁是最好的Coder
  4. linux自定义和使用 shell 环境(一)
  5. 回声检测仿真信号matlab,杭州oracle培训入门
  6. 实录:有钱男性的真实私生活
  7. 还在直接操作Redis?赶快来试试它....
  8. TortoiseSVN更改账号的方法
  9. Wireshark使用技巧详解
  10. 【滑动冲突】常见情形及解决方案
  11. C语言开定时器做呼吸灯程序,用定时器实现呼吸灯程序
  12. Verilog 层次化文件设计——彩灯控制器
  13. 腾讯云技术布道师贺嘉正式受邀出席SDCC 2016微信开发专题,分享腾讯云的小程序解决方案...
  14. Exception: ROM is missing for xxxx, see https://github.com/openai/atari-py 强化学习安装Atari环境时ROMS丢失解决办法
  15. 稀疏数组——优化五子棋游戏的小技巧
  16. 全套BAT大厂面试题整理锦集
  17. HackTheBox - Unified
  18. excel锁定单元格不能修改_Excel如何保护特定的数据不被更改?
  19. 删除PDF文件中的空白页面
  20. 手机发起PPT课件文档直播实测效果

热门文章

  1. 华为HCNA之配置OSPF认证实验
  2. 2017马哥python高级实战班 培训推荐
  3. 华为薪资等级结构表_华为内部考核体系
  4. 51单片机学习笔记(2)——51单片机简介
  5. yb3防爆电机型号含义_YBX3防爆电机
  6. 斗鱼实名认证 mysql_斗鱼平台-实名认证(绑定、认证失败、身份证认证)
  7. 摩拜单车的节能黑科技
  8. 样条曲线(spline)
  9. python制作adobe photoshop插件_Adobe Ps 2021已上线,新功能秒杀一切插件
  10. python numpy安装