Unity c# 代码在一个脚本中工作,但在另一个脚本中不起作用



嘿伙计们,所以我有这个非常奇怪的问题,所以基本上发生的事情是玩家跑进盒子(OnTriggerEnter 函数(,武器将显示在角色上,盒子会生成到另一个位置。除了我试图制作一个单独的脚本,因为它工作的脚本是用于生成框的。我不希望它出现在同一个脚本中,因为不那么整洁。

所以这是我的脚本代码,它不起作用:

public class ChangeGun : MonoBehaviour {
    public Sprite gunSprite;
    private string[] weapons = { "Pistol", "Shotgun", "Ak47", "Bazooka" };
    public GameObject currentGun;
    public void AddGunToPlayer()
    {
        //int randomNumber = Random.Range(0, 4);
        currentGun.GetComponent<SpriteRenderer>().sprite = gunSprite;
    }
}

这是它工作的脚本(请记住,我使用了完全相同的代码,忽略此脚本中的所有代码,除了 for 2 个变量和 OnTriggerEnter 函数。

public class BoxGenerator : MonoBehaviour
{
    public GameObject currentGun;
    public Sprite gunSprite;
    public Vector3[] boxPositions;
    public GameObject box;
    public GameObject startingBox;
    int randomNumber;
    // Use this for initialization
    void Start()
    {
        //random number between 0-10 thats vector size
        randomNumber = Random.Range(0, 10);
        //instantiate the starting box
        startingBox = Instantiate(box);
        //set starting box to new location
        startingBox.transform.position = boxPositions[randomNumber];
        //set tag to box
        startingBox.tag = "box";
    }
    void Update()
    {
        randomNumber = Random.Range(0, 10);
    }
    void OnTriggerEnter(Collider col)
    {
        if (col.GetComponent<Collider>().tag == "box")
        {
            startingBox.transform.position = boxPositions[randomNumber];
            currentGun.GetComponent<SpriteRenderer>().sprite = gunSprite;
        }
    }
}

请记住,当我尝试在此行下使用旧脚本时"currentGun.GetComponent((.sprite = gunSprite;">

我粘贴了这段代码并得到了空引用异常。

      ChangeGun cg = new ChangeGun();
        cg.AddGunToPlayer();

ChangeGun 为空,因为您没有设置它。您说您在检查器中设置了它,但是在您的问题中,您在代码中创建,因此它将具有默认值。

ChangeGun cg = new ChangeGun(); // cg.currentGun is null
cg.AddGunToPlayer(); // Trying to access cg.currentGun

我想您已经在检查器中设置了,因此您需要获取在检查器中创建的组件,而不是创建新的 ChangeGun:

ChangeGun cg = GetComponent<ChangeGun>();
cg.AddGunToPlayer();

最新更新