Unity学习笔记之Inspector窗口可编辑的变量

笔记:

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public enum TypeEnum
{
    Normal,
    Player
}
[System.Serializable]
public struct MyStruct
{
    public int ages;
    public bool sex;
}
[System.Serializable]
public class MyClass
{
    public int ages;
    public bool sex;
}
public class demo : MonoBehaviour
{
    #region Inspector显示的可编辑内容就是脚本的成员变量
    #endregion

    #region 知识点一 私有和保护无法显示编辑
    private int i1;
    protected string str1;
    #endregion

    #region 知识点二 让私有的保护的也可以被显示
    //加上强制序列化字段特性
    //[SerializeField]
    //所谓序列化就是把一个对象保存到一个文件或数据库字段中去
    [SerializeField]
    private int privateInt;
    [SerializeField]
    protected string protectedStr;

    #endregion

    #region 知识点三 公共的可以显示编辑
    public int publicInt=10;
    public bool publicBool = false;
    #endregion

    #region 知识点四 公共的也不让其显示编辑
    //在变量前加上特性
    [HideInInspector]
    public int publicInt2 = 50;
    #endregion

    #region 知识点五 大部分类型都能显示编辑
    public int[] array;
    public List<int> list;
    public TypeEnum type;
    public GameObject gameobject;

    //字典不能被Inspector窗口显示
    public Dictionary<int, string> dic;
    //自定义类型变量
    public MyStruct mystruct;
    public MyClass myclass;
    #endregion

    #region 知识点六 让自定义类型可以被访问
    //加上序列化特性
    //[System.Serializable]
    //字典怎样都不行
    #endregion

    #region 知识点七 一些辅助特性
    //1.分组说明特性Header
    //为成员分组
    //Header
    //[Header("分组说明")]
    [Header("基础属性")]
    public int age;
    public bool sex;
    [Header("战斗属性")]
    public int atk;
    public int def;

    //2.悬停注释Tooltip
    //为变量添加说明
    //[Tooltip("说明内容")]
    [Tooltip("闪避")]
    public int miss;

    //3.间隔特性 Space()
    //让两个字段间出现间隔
   // [Space()]
    [Space()]
    public int crit;

    //4.修饰数值的滑条范围Range
    //[Range(最小值,最大值)]
    [Range(0,10)]
    public float luck;

    //5.多行显示字符串 默认不写参数显示3行
    //写参数就是对应行
    [Multiline(5)]
    public string tips;

    //6.滚动条显示字符串
    //默认不写参数就是超过3行显示滚动条
    //[TextArea(3,4)]
    //最少显示3行 ,最多显示4行,超过4行就显示滚动条
    [TextArea(3, 4)]
    public string myLife;

    //7.为变量添加快捷方式 ContextMenuItem
    //参数1  显示按钮名
    //参数2  方法名 不能有参数
    // [ContextMenuItem("显示按钮名","方法名")]
    [ContextMenuItem("重置钱", "Test")]
    public int money;
    private void Test()
    {
        money = 99;
    }


    //8.为方法添加特性能够在Inspector中执行
   // [ContextMenu("测试函数")]
    [ContextMenu("哈哈哈哈")]
    private void TestFun()
    {
        print("测试方法");
    }
    #endregion

    #region 注意
    //1.Inspector窗口中的变量关联的就是对象的成员变量,运行时改变他们就是在改变成员变量
    public int i = 100;
    //2.拖曳到GameObject对象后 再改变脚本中变量的默认值 界面上不会改变
    //3.运行中修改的信息不会保存
    #endregion
    // Start is called before the first frame update
    void Start()
    {
      
    }

    // Update is called once per frame
    void Update()
    {
        print(i);
    }
}

练习题:

为什么加不同的特性,在Inspector窗口上会有不同的效果,请说出你的理解?

因为Unity中是通过反射得到类的信息

然后在Inspector窗口中显示字段信息

Unity内部通过反射获取字段的特性

当具有一些特殊特性时,便会做对应的处理

相关推荐
huangyuchi.22 分钟前
【Linux】LInux下第一个程序:进度条
linux·运维·服务器·笔记·进度条·c/c++
黑客老李1 小时前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
海的诗篇_2 小时前
移除元素-JavaScript【算法学习day.04】
javascript·学习·算法
大写-凌祁2 小时前
论文阅读:HySCDG生成式数据处理流程
论文阅读·人工智能·笔记·python·机器学习
Unpredictable2222 小时前
【VINS-Mono算法深度解析:边缘化策略、初始化与关键技术】
c++·笔记·算法·ubuntu·计算机视觉
傍晚冰川2 小时前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
月初,3 小时前
MongoDB学习和应用(高效的非关系型数据库)
学习·mongodb·nosql
casual_clover3 小时前
Android 之 kotlin 语言学习笔记四(Android KTX)
android·学习·kotlin
Love__Tay4 小时前
【学习笔记】Python金融基础
开发语言·笔记·python·学习·金融
半导体守望者4 小时前
ADVANTEST R3764 66 R3765 67爱德万测试networki connection programming网络程序设计手册
经验分享·笔记·功能测试·自动化·制造