Unity---Inspector面板自定义
一. 参数自定义
一个含有成员的类Player
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Player : MonoBehaviour
- {
- public int id;
- public string playerName;
- public string backStory;
- public float health;
- public float damage;
- public float weaponDamage1, weaponDamage2;
- public string shoeName;
- public int shoeSize;
- public string shoeType;
- void Start()
- {
- health = ;
- }
- }
写完之后,inspector面板上是这样的:
然后,写一个编辑扩展脚本(写出该脚本即可,不需要做任何操作):
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
- //CustomEditor(typeof()) 用于关联你要自定义的脚本
- [CustomEditor(typeof(Player))]
- //必须要让该类继承自Editor,且不需要导入UnityEditor程序集
- public class PlayerInspector : Editor
- {
- Player player;
- bool showWeapons;
- void OnEnable()
- {
- //获取当前编辑自定义Inspector的对象
- player = (Player)target;
- }
- //执行这一个函数来一个自定义检视面板
- public override void OnInspectorGUI()
- {
- //设置整个界面是以垂直方向来布局
- EditorGUILayout.BeginVertical();
- //空两行
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- //绘制palyer的基本信息
- EditorGUILayout.LabelField("Base Info");
- player.id = EditorGUILayout.IntField("Player ID", player.id);
- player.playerName = EditorGUILayout.TextField("PlayerName", player.playerName);
- //空三行
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- //绘制Player的背景故事
- EditorGUILayout.LabelField("Back Story");
- player.backStory = EditorGUILayout.TextArea(player.backStory, GUILayout.MinHeight());
- //空三行
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- //使用滑块绘制 Player 生命值
- player.health = EditorGUILayout.Slider("Health", player.health, , );
- //根据生命值设置生命条的背景颜色
- if (player.health < )
- {
- GUI.color = Color.red;
- }
- else if (player.health > )
- {
- GUI.color = Color.green;
- }
- else
- {
- GUI.color = Color.gray;
- }
- //指定生命值的宽高
- Rect progressRect = GUILayoutUtility.GetRect(, );
- //绘制生命条
- EditorGUI.ProgressBar(progressRect, player.health / 100.0f, "Health");
- //用此处理,以防上面的颜色变化会影响到下面的颜色变化
- GUI.color = Color.white;
- //空三行
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- //使用滑块绘制伤害值
- player.damage = EditorGUILayout.Slider("Damage", player.damage, , );
- //根据伤害值的大小设置显示的类型和提示语
- if (player.damage < )
- {
- EditorGUILayout.HelpBox("伤害太低了吧!!", MessageType.Error);
- }
- else if (player.damage > )
- {
- EditorGUILayout.HelpBox("伤害有点高啊!!", MessageType.Warning);
- }
- else
- {
- EditorGUILayout.HelpBox("伤害适中!!", MessageType.Info);
- }
- //空三行
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- //设置内容折叠
- showWeapons = EditorGUILayout.Foldout(showWeapons, "Weapons");
- if (showWeapons)
- {
- player.weaponDamage1 = EditorGUILayout.FloatField("Weapon 1 Damage", player.weaponDamage1);
- player.weaponDamage2 = EditorGUILayout.FloatField("Weapon 2 Damage", player.weaponDamage2);
- }
- //空三行
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- //绘制鞋子信息
- EditorGUILayout.LabelField("Shoe");
- //以水平方向绘制
- EditorGUILayout.BeginHorizontal();
- EditorGUILayout.LabelField("Name", GUILayout.MaxWidth());
- player.shoeName = EditorGUILayout.TextField(player.shoeName);
- EditorGUILayout.LabelField("Size", GUILayout.MaxWidth());
- player.shoeSize = EditorGUILayout.IntField(player.shoeSize);
- EditorGUILayout.LabelField("Type", GUILayout.MaxWidth());
- player.shoeType = EditorGUILayout.TextField(player.shoeType);
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.EndVertical();
- }
- }
写完之后inspector面板上是这样的
通过自定义Inspector视图可以实现很多方便的功能。例如将脚本组件的static变量或者私有变量显示出来,或者实现多参数的联动变化,即修改其中的某个参数,其余参数会随之调整。
内容转载自https://www.jianshu.com/p/2f686da4905c
二. 编辑时运行
代码:
- [ExecuteInEditMode]
- public class Test : MonoBehaviour
- {
- // Update is called once per frame
- void Update()
- {
- transform.LookAt(Vector3.zero);
- }
- }
ExecuteInEditMode表示程序的Update在编辑状态下运行
Unity---Inspector面板自定义的更多相关文章
- Unity Inspector面板常用的属性
在扩展Unity的时候,往往会用到一些属性,这里将常用的列一下. 1.属性只读: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngin ...
- Unity 自定义Inspector面板时的数据持久化问题
自定义Inspector面板的步骤: Unity内创建自定义的Inspector需要在Asset的任意文件夹下创建一个名字是Editor的文件夹,随后这个文件夹内的cs文件就会被放在vstu生成的Ed ...
- 让Unity的Inspector面板支持字符限制(restrict)功能
今天在优化红点组件,笔者打算将红点id由10进制改为16进制处理,就打算将红点id字段由uint类型改成string类型,用于填写16进制的字符(因为在Inspector面板里,uint/int类型字 ...
- 使用反射功能在Unity运行状态通过Inspector面板修改字段和调用方法
使用反射功能在Unity运行状态通过Inspector面板修改字段和调用方法 效果展示 一个很简单的组件脚本 运行状态在Inspector面板可以随便修改字段和调用方法 方法调用日志 设计由来 最近在 ...
- Unity编辑器环境在Inspector面板中显示变量
Serialize功能Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系. 简单的说,在没有自定义Inspector的情况下所有 ...
- Unity编辑器重写Inspector面板,面板中编辑的数据不触发场景发生变化的问题。
今天开始协助主程一起制作新框架.主程让我写关于新版UI框架注册UI预制体用的快捷编辑器. 现学现写,总算完成了. 可以直接把选中的预制体添加到UIController的数组中,期间涉及到改变大小.所以 ...
- Unity3d Inspector面板实现set/get访问器
简单说一下属性和字段的区别:字段就是成员变量,而属性确实提供给外部访问内部成员变量的接口.之所以会有属性的出现,就是为了避免外部对类的成员的直接访问,通俗的说就是OOP中的封装思想. using Un ...
- Unity3D:Text在Inspector面板中中无法显示,需转换成UTF-8格式
环境:Win10 读取text内容后unity报错:Input string was not in the correct format 同时在Inspector面板中无法预览Text文本内容 随后发 ...
- Unity检视面板的继承方法研究 (二)
之前做了普通对象的可继承的检视面板类, 现在想要实现对Unity自带的检视面板的继承的话, 要怎样写呢? 万变不离其宗, 仍然是围绕UnityEditor.Editor.CreateEditor 这 ...
随机推荐
- python的学习之路day7-socket网络编程
python基础部分学习完了,时间也已经过了两个月左右,感觉没学到什么,可能是我学习之后忘记的太多了. 由于没钱买书,要是去培训就更没钱了,所以在网上找了一本书,感觉还不错,讲的比较好,比较详细. P ...
- struts2框架
详细教程 参考struts教程https://www.w3cschool.cn/struts_2/struts_configuration.html Struts2 基于MVC设计模式的web应用程序 ...
- 乘风破浪:LeetCode真题_028_Implement strStr()
乘风破浪:LeetCode真题_028_Implement strStr() 一.前言 这次是字符串匹配问题,找到最开始匹配的位置,并返回. 二.Implement strStr() 2.1 ...
- Mojave使用pyenv安装python-zlib错误
mojave使用pyenv编译python出现 zipimport.ZipImportError: can't decompress data; zlib not available错误 解决方案: ...
- Django商城项目笔记No.5用户部分-注册接口-短信验证码
Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...
- 浅析Java虚拟机结构与机制[转]
本文旨在给所有希望了解JVM(Java Virtual Machine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理.当然本文只是一个简单的入门,不会涉及过多繁杂的参 ...
- Effective MySQL之SQL语句最优化——读书笔记之一
第一章,DBA5分钟速成 本章知识点如下: 寻找运行慢SQL的语句: show full processlist查看所有正在执行的进程及执行的语句耗时: 命令后面\G可以让命令按行显示(默认是按列). ...
- WorldWind源码剖析系列:视景体类Frustum
PluginSDK中的视景体类Frustum是三维计算机图形学中的概念,主要用来描述透视投影的过程.三维计算机图形学中关于三维物体的渲染,Direct3D和OpenGL都是先通过对现实世界中的场景先进 ...
- 理解javascript观察者模式(订阅者与发布者)
什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...
- Android 多用户多缓存的简单处理方案
需求:1.在缓存中记录用户登录信息.例如:用户名,密码 2.记录用户操作数据.例如:是否记住用户名密码.设置7天内自动登录等 简单设计:1)使用sqlite设计一张用户数据表,有用户名.密码.操作数据 ...