我有一个名为PlayerManager的“Manager”类型类,我想使用FindObjectOfType()在不同的类/对象中为它初始化一个对象。我的理解是,这将搜索当前场景层次结构以查找具有此特定脚本的对象。
我在场景中生成的预制件上使用了这行代码,而不是从一开始就在那里。变量是私有的。有时找不到对象,因为我在Start()函数上使用了这行代码,所以我假设在实际搜索对象之前调用了“FindObjectOfType”行,因此在那里什么也找不到。
我想在Update()上使用这个方法,首先检查对象是否为null,这样它就不会循环。我不知道这是否是一个好的做法,但它“感觉不对”。
如果我不想使用公共或[SerializeField]变量,那么最理想的方法是什么?
3条答案
按热度按时间jutyujz01#
如你所知,使用
FindType
代码根本不是最佳的,在Update
中使用此代码更糟糕。在这种情况下,您必须在Spawner
对象中指定Manager(例如,gun...),并在示例化后将创建的游戏对象引用到管理器。虽然你没有在你的问题中发布任何代码。但我将向你展示一个如何避免
Find
的例子。正如你所看到的,在管理器中放置一个决定性的spawn对象事件。在示例化完成之后,你应该运行你的事件。这个事件可以是任何东西。
xtfmy6hx2#
您可以在
Awake()
中示例化游戏对象,然后在Start()
中调用FindObjectOfType()
方法。或
你可以使用协程在一段时间后获取示例。这个延迟将允许你在创建后获得你要找的东西。
rlcwz9us3#
信不信由你,你可以在
Start()
函数中调用yield return null
(不需要调用协程)。