在Inspector面板中显示变量和类(Unity3D)

2022-08-07 09:25:08 浏览数 (1)

一、前言

Unity有一个强大的特性,它可以帮助我们在没有任何编程的情况下修改Inspector面板中的值。本文介绍了我们需要知道的所有信息,以便在Unity Inspector面板中显示我们的变量和自定义类。

二、显示变量

变量 让我们创建一个名为“Test.cs”的C#脚本,其中包含一个int变量:

代码语言:javascript复制
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    int something = 0;

    // Use this for initialization
    void Start () {
        
    }
        
    // Update is called once per frame
    void Update () {
        
    }
}

现在我们通过顶部菜单创建一个新的GameObject(游戏对象->创建空)并将Test.cs脚本添加到GameObject。Inspector面板现在看上去是这样的:

我们可以看到它上面有Test.cs脚本,但是我们没有看到某物一点变数都没有。

公共变量 让我们通过添加另一个变量来修改我们的脚本,但是这次用public前缀。在编程语言中,public意味着其他类也可以看到这个值。在Unity public中,也意味着变量显示在Inspector面板中。

修改后的Test.cs脚本:

代码语言:javascript复制
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    int something = 0;
    public int i_am_public = 0;

    // Use this for initialization
    void Start () {
        
    }
        
    // Update is called once per frame
    void Update () {
        
    }
}

保存了它之后,下面是Inspector面板现在的样子:

现在,我们可以轻松地修改变量,而无需再次打开脚本,也无需进行任何编程。

三、显示类

公共类 变量

我们的测试脚本现在应该有一个Address变量。假设我们也可以在其他脚本中使用一个Address,我们就可以为它创建一个完整的类。让我们开始吧:

代码语言:javascript复制
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    int something = 0;
    public int i_am_public = 0;
    
    public Address address;

    // Use this for initialization
    void Start () {
        
    }
        
    // Update is called once per frame
    void Update () {
        
    }
}

public class Address {
    public string country = "";
    public string city = "";
    public string street = "";
    public int number = 0;
}

现在,如果我们再次保存并查看Inspector面板,下面是我们所看到的:

即使我们设置了Address公众变量在我们的考试课上,我们仍然看不到它。原因是它不是像“public class Test:MonoBehaviour”那样的Unity类(每个组件都需要:MonoBehaviour,但一个简单的类没有理由是:MonoBehaviour).

大多数人在这里停下来,认为不可能在Inspector面板显示我们的Address,但实际上是这样。

类显示在Inspector面板中 诀窍是:如果一个类应该显示在Inspector面板中,我们只需通过编写[System.erialable]在类声明之上

下面是我们修改的脚本:

代码语言:javascript复制
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    int something = 0;
    public int i_am_public = 0;
    
    public Address address;

    // Use this for initialization
    void Start () {
        
    }
        
    // Update is called once per frame
    void Update () {
        
    }
}

[System.Serializable]
public class Address {
    public string country = "";
    public string city = "";
    public string street = "";
    public int number = 0;
}

现在,如果我们保存它并再次查看Inspector面板,这就是我们得到的:

就这么简单!

0 人点赞