編輯器擴充套件_Unity3D 編輯器擴充套件 強大的OnValidate
阿新 • • 發佈:2021-01-23
技術標籤:編輯器擴充套件
需要驗證一些資料
我們都知道,搭建建立的編輯器擴充套件指令碼,基本上都是給關卡設計或者策劃人員用的。在編譯遊戲的時候對他們輸入的一些數值進行校驗,是一個好的習慣。他們不需要關心一些數值的限制,但是作為開發人員的我們是需要的。
如何使用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群:891555732