嘿伙计,所以我有这个非常奇怪的问题,所以基本上会发生什么是玩家进入盒子(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;”
下使用旧脚本时,请记住我粘贴了这段代码,得到了空引用异常。
ChangeGun cg = new ChangeGun();
cg.AddGunToPlayer();
答案 0 :(得分:0)
ChangeGun为空,因为您没有设置它。你说你在检查器中设置了它,但是在你在代码中创建的问题中它将具有默认值。
ChangeGun cg = new ChangeGun(); // cg.currentGun is null
cg.AddGunToPlayer(); // Trying to access cg.currentGun
我想您已经在检查器中进行了设置,因此您需要获取在Inspector中创建的组件,而不是创建新的ChangeGun:
ChangeGun cg = GetComponent<ChangeGun>();
cg.AddGunToPlayer();