Inspector窗口可编辑变量

正常情况下,给对象添加脚本后,不添加代码的情况下,他在Inspector窗口中显示情况是这样的:

添加下列代码后:

    private int a1;
    protected string str1;
复制代码

在Inspector窗口的情况不会发生变化,因为默认私有和保护的在Inspector窗口上是无法被显示的

如果希望被保护的能过在Inspector窗口上显示出来,需要加上强制序列化字段[SerializeField]

将代码进行更改,更改内容如下所示:

    [SerializeField]
    private int a2;
    [SerializeField]
    protected string str2;
复制代码

此时再切回到Unity,他的Inspector窗口中的内容就会发生变化

可以看到被保护的内容也显示了出来,并且处于可编辑的状态

而public就不需要担心这些,public是公用的,可以直接显示,我们甚至可以在代码中提前赋值

    public int a3 = 1;
    public bool b1 = true;
复制代码

此时切回到Unity的Inspector窗口,可以看到

如果我们想让这些公共的不被编辑,可以添加[HideInInspector]

    [HideInInspector]
    public int a4 = 1;
    public bool b2 = true;
复制代码

此时切回到Unity的Inspector窗口,可以看到没有发生变化。同理我们在已经显示的代码前加上[HideInInspector]也会让其变成不可编辑状态

使用public可以让大部分类型都在Inspector窗口中显示,但是不包括自定义变量或者字典等等

如果想要让自己所定义的变量能够在Inspector窗口中显示出来,需要在结构体名或者类名前面加上[System.Serializable]即可

    public MyStruct myStruct;
    public MyClass myClass;

    [System.Serializable]
    public struct MyStruct
    {
        public int age;
    }

    [System.Serializable]
    public class MyClass
    {
        public int teacher;
    }
复制代码

此时切回到Unity的Inspector窗口,可以看到自定义的变量显示了出来

需要注意的是运行时对Inspector窗口中的变量修改会影响运行状态,但是修改的信息不会保存,停止后信息会恢复到初始值。而脚本与GameObject对象绑定后再改变脚本中的值,被绑定的游戏对象的脚本中的Inspector窗口中的值不会改变,需要重新绑定或修改。

猜你喜欢

转载自blog.csdn.net/qlxjs/article/details/127134005