zoukankan      html  css  js  c++  java
  • [Unity] Unity3D研究院编辑器之独立Inspector属性

    本文转自: http://www.xuanyusong.com/archives/3680  

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

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

    数据代码:

    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里面插入代码即可。

    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);
        }
    }

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

    using UnityEngine;
    using System.Collections;
     
    public class Game : MonoBehaviour {
     
        [MyTestAttribute(0,100)]
        public int intValue = 0;
    }

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

  • 相关阅读:
    PhpStorm 配置IDE
    PhpStorm 配置数据库
    将EXCEL表中的数据轻松导入Mysql数据表
    JavaScript Map数据结构
    JavaScript RegExp 对象
    JavaScriptDate(日期)
    JavaScript 对象
    JavaScript 闭包
    JavaScript 函数调用
    JavaScript 函数参数
  • 原文地址:https://www.cnblogs.com/yangyxd/p/5304797.html
Copyright © 2011-2022 走看看