好吧,我正在制作一个简单的游戏机制,你可以在一个小面板上滚动。在面板的边缘是8个子对象。其中4个是面板边缘的触发器,其中4个是空的游戏物体,距离面板的每个边缘1个单位,用于下一个面板预制件产生的位置。球上有一个触发器,用于检测空游戏对象的位置,以告诉面板预制在哪里产生。当球进入面板的特定触发器时,球假定基于球进入的触发器在我指定的位置上实例化面板预制件。这是我的代码:
public GameObject panelPrefab;
Transform frontSpawn;
Transform backSpawn;
Transform leftSpawn;
Transform rightSpawn;
private bool allowSpawn;
void Awake()
{
allowSpawn = true;
}
void OnTriggerStay(Collider spawn)
{
if (spawn.gameObject.tag == "FrontSpawn")
{
frontSpawn = spawn.transform;
}
else if (spawn.gameObject.tag == "BackSpawn")
{
backSpawn = spawn.transform;
}
else if (spawn.gameObject.tag == "LeftSpawn")
{
leftSpawn = spawn.transform;
}
else if (spawn.gameObject.tag == "RightSpawn")
{
rightSpawn = spawn.transform;
}
}
void OnTriggerEnter (Collider other)
{
if (other.gameObject.tag == "Front" && allowSpawn == true)
{
Instantiate (panelPrefab, frontSpawn.transform.position, Quaternion.identity);
allowSpawn = false;
}
else if (other.gameObject.tag == "Back" && allowSpawn == true)
{
Instantiate (panelPrefab, backSpawn.transform.position, Quaternion.identity);
allowSpawn = false;
}
else if (other.gameObject.tag == "Left" && allowSpawn == true)
{
Instantiate (panelPrefab, leftSpawn.transform.position, Quaternion.identity);
allowSpawn = false;
}
else if (other.gameObject.tag == "Right" && allowSpawn == true)
{
Instantiate (panelPrefab, rightSpawn.transform.position, Quaternion.identity);
allowSpawn = false;
}
}
void OnTriggerExit (Collider other)
{
allowSpawn = true;
}
我的问题是每个Instantiate调用,我得到一个NullReferenceException。我在统一编辑器中分配了panelPrefab,但我不知道是什么原因造成的!如果有人能在这里帮助我,那将非常感激...所以提前谢谢你!
答案 0 :(得分:0)
OnTriggerEnter
之前调用 OnTriggerStay
。该错误不是由panelPrefab
对象引起的。您的rightSpawn
,leftSpawn
等对象可能会为空,因此无法访问null对象的transform属性。
在实例化之前验证rightSpawn
等是否为空,然后访问它的位置。