【Unity】讲解如何在Unity的Inspector面板实现类似摄像机层次遮罩的多选效果
来源:互联网 发布:现在开淘宝店还挣钱吗 编辑:程序博客网 时间:2024/05/22 01:26
首先,我们现在的需求是这样的,我定义了一个脚本,里面有一个枚举,还有一个Public的枚举类型变量,现在我们就可以在Unity的工程里的Inspector面板中通过手动的选择来控制这个枚举变量到底选择什么了,就像我们Unity中的摄像机自带的那种可以选择遮罩层次的感觉,但是现在的问题是,我们只能选择一个,并不能多选,现在我们要解决的就是,给这个枚举变量写一段让它可以多选的代码。
效果图如下:
这里的变量名我改成了自定义的中文,其实在代码中大家可以根据自己的需求更改
和上一篇一样,我先说一下这个工程里一共有3个脚本,分别是:
(1)EnumFlagsExample.cs
(2)EnumFlagsAttribute.cs
(3)EnumFlagsAttributeDrawer.cs
——————————————————————————————————————————————————————————————————————————
脚本(1)EnumFlagsExample.cs我们是吧它挂载到了主摄像机的身上
(2)EnumFlagsAttribute.cs(3)EnumFlagsAttributeDrawer.cs哪里都没有挂载,他们两个是对[EnumFlagsAttribute("喜欢吃的水果")]功能的编写
——————————————————————————————————————————————————————————————————————————
(1)EnumFlagsExample.cs
using UnityEngine;using System.Collections;/// <summary>/// 脚本位置:主摄像机/// 脚本功能:实现类似摄像机层次遮罩的多选效果 /// 创建时间:2015.07.26/// </summary>public class EnumFlagsExample : MonoBehaviour {// 定义一个枚举public enum fruit {apple,pineapple,cherry } // 使用我们自己自定义的一个特性 [EnumFlagsAttribute("喜欢吃的水果")] // 这样在面板中就可以通过选择的方式来操作了public fruit likeFruit;}
(2)EnumFlagsAttribute.cs
using UnityEngine;using System.Collections;/// <summary>/// 脚本位置:要求放在Editor文件夹下,其实不放也可以运行/// 脚本功能:实现一个在Inspector面板中可以用滑动条来控制变量的大小/// 创建事件:2015.07.26/// </summary>public class EnumFlagsAttribute : PropertyAttribute {// 当脚本(1)使用[EnumFlagsAttribute("喜欢吃的水果")]的时候// "喜欢的水果"就是这个stringpublic string heatFoods;// 一个参数类型的[EnumFlagsAttribute("string")]public EnumFlagsAttribute(string label){heatFoods = label;}// 如果需要一个没有参数的类型,可以使用重载public EnumFlagsAttribute(){}}
(3)EnumFlagsAttributeDrawer.cs
using UnityEngine;using System.Collections;// 引入Editor命名空间using UnityEditor; // 使用绘制器,如果使用了[EnumFlagsAttribute]的这种自定义特性// 就执行下面代码对EnumFlagsAttribute进行补充[CustomPropertyDrawer(typeof(EnumFlagsAttribute))]public class EnumFlagsAttributeDrawer : PropertyDrawer {public override void OnGUI(Rect _position, SerializedProperty _property, GUIContent _lable){// attribute 是PropertyAttribute类中的一个属性// EnumFlagsAttribute中的所有属性都可以调用EnumFlagsAttribute flags = attribute as EnumFlagsAttribute;// 枚举值的数值最后为一个数字,如果要取得其代表的或包含的数值必须通过按位运算来提取// 绘制出一个下拉菜单,枚举类型_property.intValue = EditorGUI.MaskField(_position, flags.heatFoods, _property.intValue, _property.enumDisplayNames);}}
1 0
- 【Unity】讲解如何在Unity的Inspector面板实现类似摄像机层次遮罩的多选效果
- 【Unity】讲解如何在Unity的Inspector面板中用滑动条来控制变量的大小
- 将类对象显示在Unity的Inspector面板上
- Unity扩展 检视面板(Inspector面板),编辑器窗口(自己定义的类似Inspector面板的窗口),scene场景 常用的类说明
- Unity菜单编程-自定义的图片Inspector面板
- 【unity插件】Sprite Mask--在unity实现类似flash那样非常丰富的遮罩功能
- Unity 自定义Inspector面板 样式
- Unity 属性面板Inspector定制
- Unity 编辑器 Inspector面板枚举
- 如何在Unity中实现文字的渐隐效果?
- unity中可以使一个私有的变量在Inspector面板中显示出来 和 SerializeField的使用
- Unity Inspector的简单绘制
- Unity定制,将属性暴露在Inspector面板上
- unity摄像机的切换
- 崩坏学园3里离摄像机近距离的头发透明效果在unity里的实现方法
- 崩坏学园3里离摄像机近距离的头发透明效果在unity里的实现方法
- 【Unity】【技巧】如何在代码里面引用到Inspector里面显示的值
- unity实现简单的摄像机切换
- WordCount源码分析
- MyEclipse使用技巧
- android socketserver socket
- 字符串训练 ----- UVA 644题目 Immediate Decodability
- 【JavaWeb】(11)Java实现验证码制作
- 【Unity】讲解如何在Unity的Inspector面板实现类似摄像机层次遮罩的多选效果
- 定制自己的工具LogUtil
- DX学习笔记--(1)不能将参数 2 从“const char *”转换为“LPCWSTR”
- poj 3264 Balanced Lineup 线段树
- 链表类操作
- 认识Toast
- 命令行DOS下无法使用ping等命令
- Red Hat Enterprise Linux 7(RHEL7)卸载openjdk安装sun jdk
- 设计模式之-----抽象工厂模式