繁体   English   中英

Unity C#代码可以在一个脚本中工作,而不能在其他脚本中工作吗?

[英]Unity c# Code working in one script but not in other?

大家好,所以我遇到了一个非常奇怪的问题,所以基本上发生的情况是玩家碰到了盒子(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;

    }

}

这就是它起作用的脚本(请记住,我使用了完全相同的代码,请忽略此脚本中除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;”下使用旧脚本时,请记住

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

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

由于您未设置ChangeGun,因此它为null。 您说过是在检查器中设置的,但是在代码中创建的问题中,它将具有默认值。

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

我想您已经在检查器中进行了设置,因此除了创建新的ChangeGun外,还需要获取在检查器中创建的组件:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM