Unity列表未更新

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

我正在尝试从另一个脚本更新我的一个脚本的游戏对象列表。

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()。

我希望它生成对象并分配为图像中所示的对象:enter image description here

谢谢

c# unity3d
1个回答
0
投票

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作为变量传递,但是我们可以访问它。

© www.soinside.com 2019 - 2024. All rights reserved.