优质中文开源软件代码项目资源技术共享平台
传播开源的理念,推广开源项目
风雨总会过去,阳光定会到来,河南加油!

网站首页 游戏开发 正文

Unity3D研究院编辑器之独立Inspector属性(九)

longtao100 2021-08-30 游戏开发 33 ℃ 0 评论

Unity提供了强大的Editor功能, 我们可以很轻易的在EditorGUI中绘制任意的属性。比如我之前写的文章  http://www.xuanyusong.com/archives/2202

那么问题就来了,如果我有多属性想共用同一段自定义控件,那么这种方法我就需要在多份代码里绘制控件了OnInspectorGUI 这一节中我们需要用到两个全新的自定义属性PropertyAttribute和PropertyDrawer。 可以理解为一个是数据,一个是渲染。

数据代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
using UnityEngine ;
using System . Collections ;
 
public class MyTestAttribute : PropertyAttribute {
 
public int max ;
public int min ;
 
public MyTestAttribute ( int a , int b ) {
min = a ;
max = b ;
}
}
 

渲染代码,如果你想做一些复杂的结构,直接在OnGUI里面插入代码即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
using UnityEditor ;
using System . Collections . Generic ;
using UnityEngine ;
 
 
[ CustomPropertyDrawer ( typeof ( MyTestAttribute ) ) ]
public class MyTestDrawer : PropertyDrawer {
 
 
public override void OnGUI ( UnityEngine . Rect position , SerializedProperty property , UnityEngine . GUIContent label )
{
MyTestAttribute attribute = ( MyTestAttribute ) base . attribute ;
 
property . intValue = Mathf . Min ( Mathf . Max ( EditorGUI . IntField ( position , label . text , property . intValue ) , attribute . min ) , attribute . max ) ;
}
}
 

最后在需要用这个通用组件的代码上添加如下代码即可。

1
2
3
4
5
6
7
8
9
10
 
using UnityEngine ;
using System . Collections ;
 
public class Game : MonoBehaviour {
 
[ MyTestAttribute ( 0 , 100 ) ]
public int intValue = 0 ;
}
 

如下图所示,这个属性的渲染就已经完全独立出来了。

Tags:Unity3D

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

请填写验证码
开源分类
最近发表
开源网标签
开源网归档