Que*_*tin 3 c# oop unity-game-engine unityscript
作为一名学生并完成了我的学年,我研究了Unity在C#中的开发,以学习如何使用引擎,但最重要的是要玩得开心.
Unity的一个优点是你可以直接在拖放中传递一个游戏对象参数,但为了这个可能,所述变量必须是公开的,这与我在课堂上学到的相反(属性)必须尽可能私密).
我的问题是,如何确保与私有属性具有相同的结果,即,在不使用拖放系统的情况下手动恢复游戏对象?
提前致谢,对不起我的英语水平.
没有必要将变量标记public
为使其显示在编辑器中.只需将SerializeField
属性放在private
变量的顶部,它就应该显示在编辑器中.
[SerializeField]
private GameObject cam1;
Run Code Online (Sandbox Code Playgroud)
您也可以执行相反的操作,即public
在编辑器中不显示make 变量.这可以使用HideInInspector
属性完成.
[HideInInspector]
public GameObject cam1;
Run Code Online (Sandbox Code Playgroud)
但是Unity中还有另一种方法可以通过避免拖放来获取GameObject吗?
是.很多种方法.
如果GameObject已经存在于场景中,那么你可以使用其中一个GameObject.FindXXX
函数GameObject.Find
,GameObject.FindGameObjectWithTag
例如,
[HideInInspector]
public GameObject cam1;
// Use this for initialization
void Start()
{
cam1 = GameObject.Find("Name of GameObject");
}
Run Code Online (Sandbox Code Playgroud)
如果GameObject只是一个预制件,那么将预制件放在名为Resources的文件夹中,然后用Resources.Load
它来加载它.有关更详细的示例,请参阅此
最后,如果您只想获取GameObject的组件,就像您的cam1
变量不是GameObject而是组件一样,首先,像上面一样找到GameObject,然后使用该GetComponent
函数从中获取组件.
private Camera cam1;
// Use this for initialization
void Start()
{
GameObject obj = GameObject.Find("Main Camera");
cam1 = obj.GetComponent<Camera>();
}
Run Code Online (Sandbox Code Playgroud)