我目前有两个场景。第一个包含一个" PowerUp"宾语。所以脚本:
myPowerUp = GameObject.FindObjectWithTag("Fuel").GetComponent<AddFuel>();
找到对象。
我很难看到如何封装这个,以便在第二个场景中,我不会因为对象WithTag(&#34; Fuel&#34;)而没有引发错误#&# 39;存在吗?
如果我像这样使用bool:
if (!PowerUpExists){
Return;
} else {
myPowerUp = GameObject.FindObjectWithTag("Fuel").GetComponent<AddFuel>()
}
这样的事情会起作用吗?我无法理解这种逻辑是怎样的,因为如果你理解了我的意思,怎么能检查是否存在某种东西,而不检查是否存在某种东西?
请帮助,我对此很新,学习,但并没有很好的进展。
答案 0 :(得分:1)
只需检查gameObject是否存在:
GameObject powerUpGo = GameObject.FindObjectWithTag("Fuel");
if( powerUpGo != null )
{
myPowerUp = powerUpGo .GetComponent<AddFuel>() ;
}
然后,在使用myPowerUp
之前添加条件时:
if( myPowerUp != null )
{
// Do something with myPowerUp
}
否则,我只是建议您在检查器中对您的对象进行直接序列化引用,这样您就可以在需要加电时进行空检查(并且您不再需要再调用Find
)
[SerializeField]
private AddFuel myPowerUp ; // Drag & drop the object in the inspector
// ...
if( myPowerUp != null )
{
// Do something with myPowerUp
}
我可以考虑的最后一种可能性,但需要更多“手动”工作,添加一个布尔值,您将根据您当前所在的场景检查检查器。
[SerializeField]
private bool powerUpExists; // Check / uncheck it in the inspector according to the scene you are working in
// ...
if (!powerUpExists)
{
return;
}
else
{
myPowerUp = GameObject.FindObjectWithTag("Fuel").GetComponent<AddFuel>()
}