zoukankan      html  css  js  c++  java
  • Unity Editor 扩展PropertyDrawer (属性的 Inspector )

    using UnityEngine;
    
    [System.Serializable]
    public struct RangeFloat {
    
        public float min;
        public float max;
    
        public RangeFloat (float minValue, float maxValue) {
            min = minValue;
            max = maxValue;
        }
    
        public float Lerp (float t) {
            return Mathf.Lerp(min, max, t);
        }
    }
    

    以下代码放置在名为 Editor 的文件夹下

    #pragma warning disable 0649
    
    using UnityEditor;
    using UnityEngine;
    
    [CustomPropertyDrawer(typeof(RangeFloat))]
    public class RangeFloatDrawer : PropertyDrawer {
    
        public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) {
            // 只能在 position 指定的范围内绘制
            EditorGUI.BeginProperty(position, label, property);
            {
                float x, w;
                int elementCount = 3;
                for (int i = 0; i < elementCount; i++) {
                    w = position.width / elementCount;
                    x = position.x + w * i;
                    switch (i) {
                        case 0:
                            EditorGUIUtility.labelWidth = 25;
                            EditorGUI.LabelField(new Rect(x, position.y, w, position.height), property.displayName);
                            break;
                        case 1:
                            EditorGUIUtility.labelWidth = 25;
                            EditorGUI.PropertyField(new Rect(x, position.y, w, position.height), property.FindPropertyRelative("min"));
                            break;
                        case 2:
                            EditorGUIUtility.labelWidth = 25;
                            EditorGUI.PropertyField(new Rect(x, position.y, w, position.height), property.FindPropertyRelative("max"));
                            break;
                    }
                }
            }
            EditorGUI.EndProperty();
            EditorGUIUtility.labelWidth = 0; // 将其设置为 0 会重置为默认值
        }
    
    }
    
  • 相关阅读:
    第二次结对编程作业
    第一次结对编程作业
    团队项目需求分析报告
    第03组 团队Git现场编程实战
    团队项目选题报告
    上传大文件的问题
    Maven安装与环境变量设置
    jsp中的相对路径和绝对路径
    Highcharts使用入门随笔
    Tomcat服务器项目外网无法访问
  • 原文地址:https://www.cnblogs.com/kingBook/p/15331723.html
Copyright © 2011-2022 走看看