嗨,我想知道是否还有其他方法可以通过c#中的代码将GameObject设置为活动状态
我唯一知道的就是这样做:
public GameObject box;
box.SetActive(true);
这真的很棒,您可以将对象放在检查器上,但是我想知道是否还有其他方法
就像使用对象的特定名称或使用特定标签将GameObjects激活一样。每当我用谷歌搜索时,或者我搜索错误时,我都很难找到一个例子
有什么建议吗?
答案 0 :(得分:1)
您看过GameObject API还是Manual吗?
有Find,FindWithTag,FindGameObjectsWithTag
或GetComponentInChildren,FindObjectOfType,FindObjectsOfType之类的方法
(您可以用来查找某种类型的组件,从而根据gameObject
在那里设置(处于活动状态)
但是由于您请求通过标签激活多个对象:
var targetObjects = GameObject.FindGameObjectsWithTag("YourTag");
foreach(var obj in targetObjects)
{
obj.SetActive(true);
}
但是请注意,这比从检查员那里获得参考要昂贵得多。因此,通常尝试尽可能避免使用这些FindXY
方法。
是的,是的,remy_rm如何正确地在注释中指出,您绝对不应该在任何更新循环或定期调用的其他方法中使用它们。您应该经常给他们打电话,例如在Awake
,Start
等文件中存储参考,以备后用
更新
如果我正确理解了您的评论,那么在那些您还希望将其设置为活动状态的带标签的对象中还有一些孩子:
var targetObjects = GameObject.FindGameObjectsWithTag("YourTag");
foreach(var obj in targetObjects)
{
obj.SetActive(true);
// also activate all children
foreach(Transform child in obj.transform)
{
child.gameObject.SetActive(true);
}
}