Unity3D 编辑器扩展 强大的OnValidate
需要验证一些数据
我们都知道,搭建创建的编辑器扩展脚本,基本上都是给关卡设计或者策划人员用的。在编译游戏的时候对他们输入的一些数值进行校验,是一个好的习惯。他们不需要关心一些数值的限制,但是作为开发人员的我们是需要的。
如何使用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相关推荐
- 【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
- Unity3D编辑器扩展--自定义创建圆锥体
前言 这几天琢磨着开发个个人作品的时候,发现原来Unity3D官方没有提供圆锥体的创建功能,就自己做了个编辑器扩展.鉴于之前搜索Mesh编程的时候很少有博客把自己的算法讲清楚,这里我抛砖引玉,尽我所能 ...
- Unity3D 编辑器扩展 跳转显示指定目录
做编辑器扩展开发时,假如我们生成一个文件到Assets之外的目录,要查看它的时候,需要从系统路径一步步打开到那个目录. Unity给我们提供了一个API可以直接打开指定目录,类似Project窗口右键 ...
- 【Unity3D编辑器扩展】Unity3D中实现UI界面控制,UI界面的显示和隐藏实现
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...
- unity3D编辑器扩展
编辑器扩展只是在编辑项目中运行,发布出来是不会运行的. 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去. 01.使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用 ...
- Unity3D编辑器扩展1——批量处理资源
前言 最近一段时间正在学习Unity的编辑器扩展方面的内容,因此想把所学到的知识以一种方式记录下来.有可能有很多不足的地方,甚至有错误的地方,请大佬们多多提供帮助. 什么是编辑器扩展 先说说什么是编辑 ...
- unity3D 编辑器扩展,设置应用图标
Unity 2018的Android平台Icon怎样设置,自己打开Unity去看下: File->Build Settings->Player Settings->android 平 ...
- Unity3D使用经验总结 编辑器扩展篇【转】
一个引擎,最重要的就是工具,工具除了提升开发速度,提供可视化操作环境以外,还带了容错功能. 它使得大家的工作局限在一定的范围内,比如一个变量的配置,或者是一些类型的选择. 使用编辑器,使得既使不太明白 ...
- Unity3D Editor 编辑器扩展3 Editor脚本
Unity3D Editor 编辑器扩展3 Editor脚本 环境:Unity2017.2 语言:C# 总起: 在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参 ...
- 扩展Unity3d编辑器,批量修改Label字体颜色
在做游戏使用NGUI过程中,经常会遇到更改UILabel字体的颜色,手动更改Label字体颜色不仅效率很低,而且有部分Label处于未激活状态,无法找到全部Label.为此需要扩展Unity3d编辑器 ...
最新文章
- 怎么通过ip连接oracle,Oracle 无法通过IP连接问题
- 代码详解|tensorflow实现 聊天AI--PigPig养成记(1)
- 谁是最好的Coder
- linux自定义和使用 shell 环境(一)
- 回声检测仿真信号matlab,杭州oracle培训入门
- 实录:有钱男性的真实私生活
- 还在直接操作Redis?赶快来试试它....
- TortoiseSVN更改账号的方法
- Wireshark使用技巧详解
- 【滑动冲突】常见情形及解决方案
- C语言开定时器做呼吸灯程序,用定时器实现呼吸灯程序
- Verilog 层次化文件设计——彩灯控制器
- 腾讯云技术布道师贺嘉正式受邀出席SDCC 2016微信开发专题,分享腾讯云的小程序解决方案...
- Exception: ROM is missing for xxxx, see https://github.com/openai/atari-py 强化学习安装Atari环境时ROMS丢失解决办法
- 稀疏数组——优化五子棋游戏的小技巧
- 全套BAT大厂面试题整理锦集
- HackTheBox - Unified
- excel锁定单元格不能修改_Excel如何保护特定的数据不被更改?
- 删除PDF文件中的空白页面
- 手机发起PPT课件文档直播实测效果