首页 > 解决方案 > 我得到索引超出了数组错误的范围

问题描述

我是统一编码的新手,我写了一些代码让我的索引超出了数组错误的范围,但我不知道问题是什么。如果您能给我一些关于我做错了什么的见解,那就太好了。这是我为我正在统一开发的游戏编写的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 20.5f;

    public float HorizontalInput;

    public float xrange = 16;
    public GameObject[] projectileprefab;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            **//This is the broken line of code**
            int ProjectileIndex = Random.Range(0, projectileprefab.Length);
            Instantiate(projectileprefab[ProjectileIndex], transform.position, transform.rotation);





        }

        transform.Translate(Vector3.right * Time.deltaTime * speed * HorizontalInput);
        HorizontalInput = Input.GetAxis("Horizontal");
        if (transform.position.x < -xrange)
        {
            transform.position = new Vector3(-xrange, transform.position.y, transform.position.z);
        }
        if (transform.position.x > xrange)
        {
            transform.position = new Vector3(xrange, transform.position.y, transform.position.z);
        }

    }
}

标签: visual-studiounity3d

解决方案


问题是:

      int ProjectileIndex = Random.Range(0, projectileprefab.Length);
      Instantiate(projectileprefab[ProjectileIndex], transform.position, transform.rotation)

projectileprefab 的长度为零,因此它实例化了第一个对象,但它是空的。解决方案:在检查器中,您可以设置 projectileprefab 数组的长度并将游戏对象分配给它。


推荐阅读