找到所有有共同脚本的活动/非活动gameObjects



我试图找到所有有一个共同的脚本添加到他们的活动和非活动的游戏对象。我能够找到所有活动的游戏对象,但不幸的是,不活动的不被我的脚本查看。我该如何克服?

public myScript[] commonScripts;
void Start() {
commonScripts = FindObjectsOfType(typeof(myScript)) as myScript[];
}

您应该尝试一种不同的方法,即组件实例将自己添加到AwakeStart中的列表

public class MyScript : MonoBehaviour
{
void Awake()
{
FindObjectOfType<ContainerClass>().Add(this);
}
void OnDestroy()
{
FindObjectOfType<ContainerClass>().Remove(this);
}
}
public class ContainerClass : MonoBehaviour
{
private List<MyScript> scripts = new List<MyScript>();

public void Add(MyScript script)
{
scripts.Add(script);
}
public void Remove(MyScript script)
{
scripts.Remove(script);
}
}

如果myScript是您的c#脚本之一,我会使用包含所有实例的static list

示例代码
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour
{
public static List<MyScript> allObjects = new List<MyScript>();
private void Start()
{
if (allObjects.Contains(this) == false)
allObjects.Add(this);
}
private void OnDestroy()
{
if (allObjects.Contains(this))
allObjects.Remove(this);
}
}

您可以在任何其他类中使用它,如下所示

using UnityEngine;
public class AnotherScript : MonoBehaviour
{
private void AnyFunction()
{
foreach (MyScript ms in MyScript.allObjects)
{
// do whatever you want
}
}
}

相关内容

  • 没有找到相关文章

最新更新