zoukankan      html  css  js  c++  java
  • Unity中HideInInspector和SerializeField以及Serializable

    首先,Unity会自动为Public变量做序列化,序列化的意思是说再次读取Unity时序列化的变量是有值的,不需要你再次去赋值,因为它已经被保存下来。
    然后是,什么样的值会被显示在面板上?
    已经被序列化,但是没有用HideInInspector标记的值。

    [HideInInspector]表示将原本显示在面板上的序列化值隐藏起来。

    [SerializeField]表示将原本不会被序列化的私有变量和保护变量可以序列化,这么他们在下次读取时,就是你上次赋值的值。

    1如果name是公有的序列化变量。
    1.1如果你想要在面板中看到name,那么用:
    public int name;

    1.2如果你不想在面板中看到name,那么用:
    [HideInInspector]
    public int name;
    // 这样name可以在程序中被代码赋值,但不会在面板中看到并手动设置赋值。

    2 如果name是私有的序列化变量,你想在面板中读取并保存,那么用:
    [SerializeField]
    private int name;

    3.如果name是私有的序列化变量,你想在面板中读取,但是不保存,那么用:
    [HideInInspector][SerializedField]
    private int name;
    public int Name{
        get{return name;}
    }
    然后在Editor中显示,
    EditorGUILayout.LabelField("value",game.Name.ToString());

    4如果name是私有序列化变量,你不想在面板中做任何操作(不想看到,也不想写),但是想要在程序中给它赋值,那么用。
    [HideInInspector][SerializedField]
    private int name;
    public int Name{
        get{return name;}
        set{name = value;}
    }

    可以把一个类标记为[Serializable]

    [Serializable]

    public class person
    {
        [SerializeField]
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public string age;
    }

    然后:

    [SerializeField]
     private person p = new person();

    name和age都会显示在unity面板中

  • 相关阅读:
    AE二次开发,解决子窗体使用父窗体的AxControl控件
    ArcEngine二次开发中运行出现There is no Spatial Analyst license currently available or enabled.
    Js网站开发学习第一天
    Winform开发1
    MySql安装
    Windows ping加时间戳
    XML特性总结
    linux手册中函数名后小括号中数字的含义
    TCP通信
    swap交换分区概念
  • 原文地址:https://www.cnblogs.com/nsky/p/4476279.html
Copyright © 2011-2022 走看看