使用 "FindObjectsOfType "有什么替代方法?

问题描述 投票:0回答:2

目前我使用的是Unity和C#。我的代码如下。

    var buttons = FindObjectsOfType<DefenderButton>();

    foreach (DefenderButton button in buttons) // color unselect resets back color
    {
        button.GetComponent<SpriteRenderer>().color = new Color32(41, 41, 41, 255); 
    }

有什么方法可以替代使用 "FindObjectsOfType"?FindObjectsOfType?

c# unity3d
2个回答
2
投票

为所有包含该类的GameObjects设置相同的标签。DefenderButton 或使用Unity中的属性 tagGameObject 类来设置标签。对于这个答案,我将使用标签 any.设置好标签后,您可以进行以下操作。

foreach (GameObject obj in GameObject.FindGameObjectsWithTag("any"))
{
    foreach (DefenderButton button in obj.GetComponents<DefenderButton>())
    {
       button.GetComponent<SpriteRenderer>().color = new Color32(41, 41, 41, 255); 
    }
}

0
投票

找到有标签的对象 string 财产GameObject.Find()https:/docs.unity3d.comScriptReferenceGameObject.Find.html。

查找您用特定标签标记的对象。GameObject.FindWithTag()https:/docs.unity3d.comScriptReferenceGameObject.FindWithTag.html。

最后(据我所知),你可以只穿越 GameObject 层次结构和 "查找 "的东西,例如(伪代码只是为了给你一个想法)。

假设你的游戏对象是这样排列的:

- obj 0
  - Obj1
    - obj1A
    - obj2B
  - Obj2

如果你在... Obj2,你可以做以下工作。

var obj2B = transform.parent // obj0
              .Children.First() // obj1
                 .Children.Last() // obj2B
© www.soinside.com 2019 - 2024. All rights reserved.