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

Unity动画编辑器扩展是一种在Unity引擎中使用的功能,用于增强和定制动画编辑器的能力。通过扩展动画编辑器,开发者可以根据自己的需求添加新的功能和工具,使动画制作过程更加高效和便捷。 在扩展动画编辑器的过程中,开发者可以使用Unity的插件框架和API来创建自定义的窗口、工具栏、菜单和面板等界面元素。可以添加自定义的动画组件和控制器,以增加一些特殊的动画效果或行为。还可以编写脚本来实现自定义的动画算法、运动捕捉、路径编辑等功能,以满足不同类型的动画需求。 通过扩展动画编辑器,开发者可以更好地管理和组织动画资源,例如创建动画层级、动画事件管理,设置动画的播放速度和循环等。还可以进行动画的剪辑、合并、复制、粘贴和删除等操作,以快速调整动画的内容和表现效果。 另外,通过扩展动画编辑器,还可以实现与其他外部工具或软件的集成,例如使用第三方模型编辑器创建和导入动画,与物理引擎结合实现更逼真的动画效果,或者与VR/AR设备结合实现交互式的虚拟现实动画。 总之,Unity动画编辑器扩展为开发者提供了灵活和可定制的工具,使他们能够更加自由地创造各种精彩和富有表现力的动画作品。无论是游戏开发还是影视制作,扩展动画编辑器都能够为艺术家和开发者们提供更多的创作空间和可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值