我试图找到所有有一个共同的脚本添加到他们的活动和非活动的游戏对象。我能够找到所有活动的游戏对象,但不幸的是,不活动的不被我的脚本查看。我该如何克服?
public myScript[] commonScripts;
void Start() {
commonScripts = FindObjectsOfType(typeof(myScript)) as myScript[];
}
您应该尝试一种不同的方法,即组件实例将自己添加到Awake
或Start
中的列表
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
}
}
}