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面板中

  • 相关阅读:
    Http协议(一)基础知识
    Redis问题汇总
    Sql Server存储过程传递XML参数
    C# Redis
    Task的异常捕获和处理方法
    Entity Framework教程
    WebBrowser 弹窗体关闭原理
    C# 虹软SDK视频人脸识别和注册
    C#性能优化:延迟初始化Lazy
    DZ 特殊主题简单开发教程
  • 原文地址:https://www.cnblogs.com/nsky/p/4476279.html
Copyright © 2011-2022 走看看