为什么有时候我的代码会运行而有时候我的参数会超出范围?

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

有时候我的代码运行但是没有改变它停止工作的任何代码,并说我有错误参数超出范围异常?它说它在线,“if (gameObject.transform.localPosition.y == finP[1].transform.localPosition.y)”。

这是我的代码:

    public class enemy : MonoBehaviour
    {
        List<GameObject> finP = new List<GameObject>();
        public Node nodeScript;
        Vector2 direction = Vector2.zero;
        bool trigger = false;
        public float Speed = 1.0f;
        // Use this for initialization
    void Start()
    {
        nodeScript = GameObject.Find("P16").GetComponent<Node>();

    }

    // Update is called once per frame
    void Update()
    {   
        apple();
        MovePosition();
        //nodeScript.FinalPath.ForEach(x => Debug.Log(x));
        //Debug.Log(nodeScript.FinalPath.Count);
    }
    void apple()
    {
            if (gameObject.transform.localPosition.y == finP[1].transform.localPosition.y)
            {
                if (gameObject.transform.localPosition.x > finP[1].transform.localPosition.x)
                {
                Debug.Log("left");
                    direction = Vector2.left;
                }
                else
                {
                Debug.Log("right");
                direction = Vector2.right;
                }
            }
            else
            {
                if (gameObject.transform.localPosition.y > finP[1].transform.localPosition.y)
                {
                direction = Vector2.down;
                }
                if (gameObject.transform.localPosition.y < finP[0].transform.localPosition.y)
                {
                    direction = Vector2.up;
                }
            }       

    }
    public void OnTriggerEnter2D(Collider2D other)
    {

        if (other.gameObject.tag == "pallet")
        {
            finP.Clear();
            foreach(string var in nodeScript.FinalPath)
            {
                Debug.Log("en script " + var);
                finP.Add(GameObject.Find(var));
            }
            Debug.Log(finP[1]);
        }


    }
    void MovePosition()
    {
        transform.localPosition += (Vector3)(direction * Speed) * Time.deltaTime;
    }
}
c# unity3d arguments outofrangeexception
1个回答
1
投票

当您点击“托盘”游戏对象时,您正在清除列表,同时还尝试每帧访问该列表的元素。虽然您之后立即添加到列表中,但可能存在一个或两个框架,其中列表缺少必需的元素。在你的apple()函数中,我会抛出一个if (finP.Count < 1) return;,这应该可以解决你的问题。

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