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

Untiy基础学习(五)Inspector窗口中可编辑的变量

目录

一、什么是可编辑的变量——显示的可编辑内容就是脚本的成员变量

二、有哪些值得注意的点

        (1)私有或者保护的变量,默认情况下是无法在外部显示的。

        (2)公开变量可以直接显示在上面

(3)不让公有的变量显示

(4)有哪些类型可以直接显示在Inpsector窗口上呢,C#中的数据类型,除了字典以外都可以。

(5)自定类型如何显示,利用[System.Serializable]特性。在你自定义申明的类或者结构体前面加上这个。例如:

(6)一些辅助特性

三、总结 


一、什么是可编辑的变量——显示的可编辑内容就是脚本的成员变量

        当你在Untiy中选中一个对象,他一定会有一个Inspector窗口,而这些个窗口上显示的内容就是可以在外部直接调整的变量,不用到内部修改,提高了开发效率。如下图所示。Transform就是Unity给我们提供好的基本组件,你看上面的Position,Rotation都是一些可以编辑的变量。那么这些变量有什么规则呢?

二、有哪些值得注意的点

        (1)私有或者保护的变量,默认情况下是无法在外部显示的。

        只有在这个变量前加上加上强制序列化字段特性[SerializeField]才可以使得在Inspector窗口上显示。所谓序列化就是把一个对象保存到一个文件或数据库字段中去

例如我在VS里面写如下语句:

private int age;
private int num;

在Unity中并不会显示这两个变量信息,因为他们是私有的

给age加上特性后:

        (2)公开变量可以直接显示在上面

[SerializeField]private int age;
private int num;public int classs;

(3)不让公有的变量显示

加上这个特性[HideInInspector]就没有了:

[SerializeField]private int age;
private int num;[HideInInspector] public int classs;

(4)有哪些类型可以直接显示在Inpsector窗口上呢,C#中的数据类型,除了字典以外都可以。

public int[] array;
public List<int> list;
public E_TestEnum type;
public GameObject gameObj;//字典不能被Inspector窗口显示编辑
public Dictionary<int, MyStruct> dic;

        那如果你就是想用字典的数据结构怎么办,你可以自定义一个键值对类,自己手动实现一个。

(5)自定类型如何显示,利用[System.Serializable]特性。在你自定义申明的类或者结构体前面加上这个。例如:

public struct MyStruct
{public int i1;public bool sex;}
[System.Serializable]
public class MyClass
{public int age;public bool sex;
}

(6)一些辅助特性

①为成员分组特性Header
为成员分组,就是在Insoector窗口上一块一块显示
Header特性
[Header("分组说明")]

示例:

[Header("基础属性")]
public int age;
public bool sex;[Header("战斗属性")]
public int hp;
public int mp;

 

②悬停注释特性Tooltip
为变量添加说明,就是你鼠标放在那里会显示一些内容
[Tooltip("说明内容")]

示例:

[Tooltip("闪避")]
public int miss;

 

③间隔特性 Space()
让两个字段中间出现间隔,没什么好说的,就是和上一个字符分隔开来,里面可以填数字,越大越开
[Space()]

④修饰数值的滑条范围特性Range
[Range(最小值, 最大值)]

示例:

[Range(0, 10)]
public float luck;

 在0~10之间可以滑动

⑤多行显示字符串 默认不写参数显示3行
写参数就是对应行
[Multiline(4)]

示例:

[Multiline(4)]
public string tips;

 

⑥滚动条显示字符串 //默认不写参数就是超过3行显示滚动条
[TextArea(3, 5)]  //最少显示3行,最多显示5行

[TextArea(3,4)]
public string tips2;

 和上面那个的区别就是一个有滚动条一个莫得。

⑦为变量添加快捷方法 ContextMenuItem
参数一:显示按钮名
参数二:方法名不能有参数

示例:

[ContextMenuItem("重置钱", "Test")]
public int money;

初始情况: 

 

右击这个名字:就可以看到我们实现的重置钱的方法,点一下看看效果。就会变成1500

⑧为方法添加特性能够在Inspector窗口中执行
[ContextMenu("方法名")]

示例:

[ContextMenu("哈哈哈哈")]
private void TestFun()
{ print("执行了TestFun方法");}

点击脚本文件的右上角三个点会出现你自定义的方法: 

点一下看看效果:

三、总结 

特性名称功能描述用法示例命名空间备注
[SerializeField]强制序列化私有字段[SerializeField] private int score;UnityEngine使私有变量在Inspector可见
[HideInInspector]隐藏公有字段[HideInInspector] public float hiddenValue;UnityEngine配合public使用
[Header]添加分组标题[Header("角色属性")]
public int hp;
UnityEngine纯文本信息展示
[Tooltip]鼠标悬停显示提示信息[Tooltip("移动速度")]
public float speed;
UnityEngine帮助文档说明
[Range]数值滑动条约束[Range(0, 100)] public int successRate;UnityEngine仅适用数值类型
[Space]插入垂直间距[Space(20)]
public Vector3 position;
UnityEngine参数为像素高度
[Multiline]多行文本输入框[Multiline(4)] public string description;UnityEngine指定可见行数
[TextArea]带滚动条的文本域[TextArea(3, 10)] public string story;UnityEngine可设置最小/最大行数
[ContextMenu]在组件菜单添加自定义方法[ContextMenu("初始化数据")]
private void InitData() { ... }
UnityEngine方法需无参数
[ContextMenuItem]为字段添加右键菜单方法[ContextMenuItem("随机数值", "RandomValue")]
public int value;
UnityEngine需同时指定方法名
[System.Serializable]使自定义类型可序列化[System.Serializable]
public class Weapon { ... }
System需应用于class/struct
[RequireComponent]强制依赖组件[RequireComponent(typeof(Rigidbody))]
public class Player : MonoBehaviour { ... }
UnityEngine自动添加必要组件
[DisallowMultipleComponent]禁止同一物体挂载多个实例[DisallowMultipleComponent]
public class Singleton : MonoBehaviour { ... }
UnityEngine适用于单例组件
[ExecuteInEditMode]脚本在编辑器模式下运行[ExecuteInEditMode]
public class EditorTool : MonoBehaviour { ... }
UnityEngine慎用性能消耗大的操作

相关文章:

  • Linux之用户管理
  • SALOME源码分析: SolverLab
  • 大模型(LLMs)RAG 版面分析——文本分块面
  • Rust的安全卫生原则
  • Java二维码学习
  • Spark,Idea中编写Spark程序 2
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 4 |IMU 死算与校正:惯性导航在资源受限环境的落地
  • 在CentOS环境中安装MySQL数据库保姆级教程
  • 基于 PyQt 的YOLO目标检测可视化界面+ nuitka 打包
  • 工程师 - 汽车分类
  • 基于SpringBoot + HTML 的宠物医院预约管理
  • 硬件工程师面试常见问题(13)
  • TS typeof运算符
  • TS 变量类型生成
  • chili3d调试10 网页元素css node deepwiki 生成圆柱体 生成零件图片
  • RabbitMQ入门基础
  • 表驱动 FSM 在 STM32 上的高效实现与内存压缩优化——源码、性能与实践
  • 如何从GitHub上调研优秀的开源项目,并魔改应用于工作中?
  • 【C++11】其他一些新特性 | 右值引用 | 完美转发
  • 数据库MySQL学习——day8(复习与巩固基础知识)
  • 库里22分赢下抢七大战,火箭10年难破“火勇大战”的魔咒
  • 新剧|《执法者们》《亲爱的仇敌》5月7日开播
  • “彩虹滑道”项目两男童相撞飞跌出去,景区:工作人员误判导致
  • 宿州市委副书记任东已任市政府党组书记
  • 两部门发布“五一”假期全国森林草原火险形势预测
  • 新华时评:防范安全事故须臾不可放松