我正在尝试从另一个脚本更新我的一个脚本的游戏对象列表。
Script1.cs
public GameObject prefab;
public void GenerateObjects()
{
if (GameObject.Find("Objects") != null && GameObject.Find("Objects").transform.childCount > 0)
{
for (int i=0;i< GameObject.Find("Objects").transform.childCount; i++)
{
Destroy(GameObject.Find("Objects").transform.GetChild(i).gameObject);
}
}
Script2.instance.prefab = prefab;
Script2.instance.myList.Clear();
Script2.instance.CreateObjects();
}
Script2.cs
public static Script2 instance;
[SerializeField]
public List<GameObject> myList;
public GameObject prefab;
public int count;
public void Awake()
{
instance = this;
CreateObjects();
}
public void CreateObjects()
{
myList = new List<GameObject>();
for (int i= 0;i < count;i++)
{
GameObject g = Instantiate(prefab);
g.transform.SetParent(gameObject.transform);
myList.Add(g);
Debug.Log("Adding to list " + g.name);
}
}
错误:UnassignedReferenceException:尚未分配Script2的变量prefab。
我在单击按钮时调用了GenerateObjects()。
谢谢
Script1.cs
public static Script1 instan;
public GameObject prefab;
private void Awake()
{
instan = this;
}
public void GenerateObjects()
{
if (GameObject.Find("Objects") != null && GameObject.Find("Objects").transform.childCount > 0)
{
for (int i = 0; i < GameObject.Find("Objects").transform.childCount; i++)
{
Destroy(GameObject.Find("Objects").transform.GetChild(i).gameObject);
}
}
Script2.instance.myList.Clear();
Script2.instance.CreateObjects();
}
Script2.cs
public static Script2 instance;
[SerializeField]
public List<GameObject> myList;
public GameObject prefab;
public int count;
public void Awake()
{
instance = this;
}
public void CreateObjects()
{
prefab = Script1.instan.prefab;
myList = new List<GameObject>();
for (int i= 0;i < count;i++)
{
GameObject g = Instantiate(prefab);
g.transform.SetParent(gameObject.transform);
myList.Add(g);
Debug.Log("Adding to list " + g.name);
}
}
从Script1分配Script2预制件的值是行不通的,但是从Script1中获取预制件的值对我来说是有效的。我想不可能将GameObject作为变量传递,但是我们可以访问它。