当前位置: 首页 > news >正文

[Unity] Unity3D研究院编辑器之独立Inspector属性

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

 

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

 

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

 

转载于:https://www.cnblogs.com/yangyxd/p/5304797.html

相关文章:

  • 递归案例:汉诺塔问题
  • 三大家族轻松管理CentOS 7网络属性配置
  • 顺序表
  • PSD解析工具实现(二)
  • 细谈asp.net如何处理应用程序-----c#菜鸟日记
  • 如何通过热修复,搞定开发中的那些 Bug?
  • redis 的setnx命令
  • HTML5实战与剖析之媒体元素(6、视频实例)
  • Excel实用操作
  • glance镜像元数据
  • CleanMyMac 3新增功能有哪些
  • 包含min函数的栈
  • Canva(设计图片)
  • Thinkphp 简单表单提交验证
  • 为了媳妇的一张号,我与百度医生杠上了
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • ES6 ...操作符
  • HTTP 简介
  • Java 网络编程(2):UDP 的使用
  • JavaScript-Array类型
  • JavaScript新鲜事·第5期
  • jquery ajax学习笔记
  • Lsb图片隐写
  • React+TypeScript入门
  • Service Worker
  • vue-cli3搭建项目
  • 百度地图API标注+时间轴组件
  • 小试R空间处理新库sf
  • 异常机制详解
  • 译自由幺半群
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • elasticsearch-head插件安装
  • 从如何停掉 Promise 链说起
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ![CDATA[ ]] 是什么东东
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (推荐)叮当——中文语音对话机器人
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET序列化 serializable,反序列化
  • .net中我喜欢的两种验证码
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @NestedConfigurationProperty 注解用法
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ JavaScript ] JSON方法
  • [100天算法】-实现 strStr()(day 52)
  • [2010-8-30]
  • [Angularjs]ng-select和ng-options
  • [BZOJ2850]巧克力王国
  • [c]统计数字
  • [dts]Device Tree机制