在Unity编辑器中是否可以显示静态字段?

4
我昨天写了一个小脚本,但它没有起作用。(在Unity中,序列化字段没有显示,还有一些错误,例如我无法使用非静态成员的引用(serialize Field))。您能帮我吗?
例如:
using UnityEngine;
public class sExample : MonoBehaviour
{
  [SerializeField] public static GameObject gameObj;
  public void serializeUse()
  {
    //Do something with gameObj
  }
}
public class serializeEx : NetworkBehaviour
{
  public void Update()
  {
    If (!isLocalPlayer)
    {
      sExample.serializeUse()
    }
  }
}

非常感谢。

2个回答

3

应该可以行得通。 我认为当你想要将某些内容暴露给编辑器时,不能使用静态。

using UnityEngine;
[Serializable]
public class sExample : MonoBehaviour
{
  [SerializeField] public GameObject gameObj;
  public void serializeUse()
  {
    //Do something with gameObj
  }
}

public class serializeEx : NetworkBehaviour
{
  public void Update()
  {
    If (!isLocalPlayer)
    {
      sExample.serializeUse()
    }
  }
}

编辑:

帖所述,静态变量在JavaScript中似乎可行。要使其正常工作,请在检查器中切换到调试视图,如下面显示的图像所示:

image showing the debug view

编辑2:

关于Serializable的解释取自Unity文档

Serializable属性允许您嵌入具有子属性的类以在检查器中显示它们。

您可以使用此方法在检查器中显示变量,类似于Vector3在检查器中的显示方式。名称和一个三角形来展开其属性。要实现这一点,您需要创建一个从System.Object派生且带有Serializable属性的类。在JavaScript中,Serializable属性是隐式的,不需要设置。

using UnityEngine;

[System.Serializable]
class Test : System.Object
{
    public int p = 5;
    public Color c = Color.white;
}

你能解释一下 [Serializable] 是干嘛的吗?我在学C#,还不太懂。 - Patryk Popowicz
当然可以!:) 我编辑了答案。如果我的回答解决了您的问题,我会很高兴您接受它 :) - Tobias Theel

1

[SerializeField] 属性不支持静态字段和引用类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接