首页 > 解决方案 > Unity - 如何在实例化的预制件上的数组中设置一个值

问题描述

我实例化了一些预制件并需要设置路径。路径节点的长度在 1 到 3 个部分之间。

public GameObject mb;

void Start()
    {
        GameObject planeIcon;
        foreach (PlaneData p in PlaneManager.planesData)
        {
            if(p.route != 0)
            {
                planeIcon = Instantiate(iconPrefab);
                planeIcon.GetComponent<Image>().sprite = Resources.Load<Sprite>(p.planeFilename + "_icon");
                planeIcon.name = p.planeName;
                planeIcon.GetComponent<AnimatePlane>().moveSpeed = p.planeSpeed;
                planeIcon.GetComponent<AnimatePlane>().range = p.planeRange;

                planeIcon.GetComponent<AnimatePlane>().pathNode[0] = mb;
}

这会引发 IndexOutOfRangeException: Index was outside the bounds of the array on last line

AnimatePlane 代码附加到上面实例化的预制件上

public class AnimatePlane : MonoBehaviour
{
    public GameObject[] pathNode = new GameObject[3];
    public float moveSpeed;
    public int range;

    // Use this for initialization
    void Start()
    {
        Debug.Log("pathnode length: " + pathNode.Length);
        CheckNode();
    }

调试输出是 show pathnode length = 0 我假设我需要在 AnimatePlane 代码中以某种方式初始化数组,但想不出我缺少什么。谢谢

标签: unity3d

解决方案


嗨试试这个。

    public GameObject mb;
    
    void Start()
        {
            GameObject planeIcon;
            foreach (PlaneData p in PlaneManager.planesData)
            {
                if(p.route != 0)
                {
                    planeIcon = Instantiate(iconPrefab);
                    planeIcon.GetComponent<Image>().sprite = Resources.Load<Sprite>(p.planeFilename + "_icon");
                    planeIcon.name = p.planeName;
                    AnimatePlane plane = planetIcon.GetComponent<AnimatePlane>();

                    plane.moveSpeed = p.planeSpeed;
                    plane.range = p.planeRange;
                    plane.pathNode = new GameObject[3];
                    plane.pathNode[0] = mb;
    }

推荐阅读