作为一名学生并完成了我的学年,我学习了 C# 中的 Unity 开发,以学习如何使用引擎,而且最重要的是为了获得乐趣。

Unity 的优点之一是您可以直接在拖/放中传递游戏对象参数,但要做到这一点,必须将所述变量公开,这与我在类里面学到的(属性必须尽可能多地是私有(private)的)。

我的问题是,如何确保具有与私有(private)属性相同的结果,即在不使用拖放系统的情况下手动恢复游戏对象?

提前致谢,对我的英语水平感到抱歉。

c# - 如何在 Unity 中防止  "public"?-LMLPHP

最佳答案

无需将变量标记为 public 即可使其出现在编辑器中。只需将 SerializeField 属性放在 private 变量的顶部,它就会显示在编辑器中。

[SerializeField]
private GameObject cam1;

您也可以做相反的事情,使 public 变量不显示在编辑器中。这可以通过 HideInInspector 属性来完成。
[HideInInspector]
public GameObject cam1;



是的。很多种方法。

如果 GameObject 已经存在于场景中,那么您可以使用 GameObject.FindXXX 函数之一,例如 GameObject.FindGameObject.FindGameObjectWithTag
例如,
[HideInInspector]
public GameObject cam1;

// Use this for initialization
void Start()
{
    cam1 = GameObject.Find("Name of GameObject");
}

如果 GameObject 只是一个预制件,则将预制件放在名为 Resources 的文件夹中,然后使用 Resources.Load 加载它。有关更详细的示例,请参阅 this

最后,如果您只想获取该游戏对象的组件,就像您的 cam1 变量一样,它不是一个游戏对象而是一个组件,首先,像我上面所做的那样找到游戏对象,然后使用 GetComponent 函数从中获取组件。
private Camera cam1;

// Use this for initialization
void Start()
{
    GameObject obj = GameObject.Find("Main Camera");
    cam1 = obj.GetComponent<Camera>();
}

关于c# - 如何在 Unity 中防止 "public"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51072746/

10-13 22:41