您如何检查 Unity 中 parent 中哪些 children 处于活动状态?
How can you check which children are active within a parent in Unity?
我在 "Cameras" parent:
下有一个摄像头列表
在我的游戏中,我想将角色的相对性设置为处于活动状态的摄像机。例如,如果 Camera012 处于活动状态,则将角色的控件设置为相对于 Camera012。但是,我不知道如何通过 parent object 检查哪些 children 处于活动状态。
if (Camera002.activeInHierarchy) {
// do something
}
如果需要,可以将所有摄像头添加到一个数组中,然后使用 for 循环检查每个摄像头
如果你只要求 children 活跃的很容易,如果你只想要一个 child 一次添加一个 sciprt 到相机 object 其中包括
Camera firstactiveCamera = GetComponentInChildren<Camera>();
这将 return 仅第一个活动相机
如果你想找到 children 中所有活动的相机,那么它会返回一个数组。
Camera[] activeCamerasInChildren = GetComponentsInChildren<Camera>();
不同之处在于这是复数(组件),因此您可以在 children 中获得所有活动相机 object。
即使你想在 children 中停用 objects,你也可以使用
Camera[] activeCamerasInChildren = GetComponentsInChildren<Camera>(true);
如果您使用函数 getcomponent 发送 true,它甚至会在数组中找到不活动的 objects 和 return。
GetComponentsInChildren
的缺点(如 所建议)是它 returns 最终进一步嵌套 children 并且不只查看第一层 child仁.
也activeInHierarchy
(建议)returns只有true
,如果所有parent in the Hierarchy of the examused object也很活跃。
通常您可以使用
遍历游戏对象的所有第一层 children
foreach(Transform child in someGameObject.transform)
{
// use child
}
并使用
检查 child 是否处于活动状态
// the object to examine the childs of
Transform parent;
// iterate through all first level children
foreach(Transform child in parent)
{
if(child.gameObject.activeSelf)
{
Debug.Log($"The child {child.name} is active!");
}
else
{
Debug.Log($"The child {child.name} is inactive!");
}
}
如果 object 层次结构中的任何 parent 处于非活动状态但 child 本身处于活动状态,这也适用。
public GameObject gameobject_I want to know;
print(gameobject_I want to know.transform.GetComponentsInChildren<Transform>().Length);
我在 "Cameras" parent:
在我的游戏中,我想将角色的相对性设置为处于活动状态的摄像机。例如,如果 Camera012 处于活动状态,则将角色的控件设置为相对于 Camera012。但是,我不知道如何通过 parent object 检查哪些 children 处于活动状态。
if (Camera002.activeInHierarchy) {
// do something
}
如果需要,可以将所有摄像头添加到一个数组中,然后使用 for 循环检查每个摄像头
如果你只要求 children 活跃的很容易,如果你只想要一个 child 一次添加一个 sciprt 到相机 object 其中包括
Camera firstactiveCamera = GetComponentInChildren<Camera>();
这将 return 仅第一个活动相机
如果你想找到 children 中所有活动的相机,那么它会返回一个数组。
Camera[] activeCamerasInChildren = GetComponentsInChildren<Camera>();
不同之处在于这是复数(组件),因此您可以在 children 中获得所有活动相机 object。
即使你想在 children 中停用 objects,你也可以使用
Camera[] activeCamerasInChildren = GetComponentsInChildren<Camera>(true);
如果您使用函数 getcomponent 发送 true,它甚至会在数组中找到不活动的 objects 和 return。
GetComponentsInChildren
的缺点(如
也activeInHierarchy
(建议true
,如果所有parent in the Hierarchy of the examused object也很活跃。
通常您可以使用
遍历游戏对象的所有第一层 childrenforeach(Transform child in someGameObject.transform)
{
// use child
}
并使用
检查 child 是否处于活动状态// the object to examine the childs of
Transform parent;
// iterate through all first level children
foreach(Transform child in parent)
{
if(child.gameObject.activeSelf)
{
Debug.Log($"The child {child.name} is active!");
}
else
{
Debug.Log($"The child {child.name} is inactive!");
}
}
如果 object 层次结构中的任何 parent 处于非活动状态但 child 本身处于活动状态,这也适用。
public GameObject gameobject_I want to know;
print(gameobject_I want to know.transform.GetComponentsInChildren<Transform>().Length);