【发布时间】:2017-05-03 22:03:35
【问题描述】:
我知道可能存在重复,我试图找出导致我的 null 的原因,但也许你可以帮助我。所以我正在制作一个游戏,其中我在检查器中定义为数组的六个点随机生成“警察”。这是由协程定期完成的。我尝试添加一种方法来检查相机是否可以看到生成点。这是我的代码 sn-ps:
IEnumerator AddPoliceManCR()
{
int counter = 0;
yield return new WaitForSeconds(1.0f);
while (counter < 10)
{
AddPoliceMan();
counter++;
yield return new WaitForSeconds(Random.Range(3.0f, 5.0f));
}
while (true)
{
AddPoliceMan();
yield return new WaitForSeconds(Random.Range(0.5f, 3.0f));
}
}
void AddPoliceMan()
{
GameObject policeManClone = (GameObject)policemanPool.getPooledPoliceman();
policeManClone.transform.position = SetSpawnPosition();
policeManClone.transform.LookAt(new Vector3(player.transform.position.x, 0, player.transform.position.z));
policeManClone.tag = "PoliceMan";
policeManClone.SetActive(true);
}
Vector3 SetSpawnPosition()
{
Vector3 position;
position = spawnPositions[Random.Range(0, 6)];
Debug.Log(position.ToString());
if (Camera.current.WorldToViewportPoint(position).x > 0f
&& Camera.current.WorldToViewportPoint(position).x < 1f
&& Camera.current.WorldToViewportPoint(position).y > 0f
&& Camera.current.WorldToViewportPoint(position).y < 1f
&& Camera.current.WorldToViewportPoint(position).z > 0f)
{
Debug.Log("Spawn point visible");
}
else
{
Debug.Log("Spawn point is NOT visible");
}
return position;
}
协程在Start() 中声明。这个脚本和游戏对象在任何时候都不会被破坏。 NullReferenceException 符合:if (Camera.current.WorldToViewportPoint(position).x > 0f
至少在大多数情况下,如果点可见或不可见,Debug.Logs 会正确显示。
问题是每次调用SetSpawnPopsition() 时都不会发生这种情况。可能是游戏立即开始,也可能是在调用此方法 20 次之后。似乎是随机的。此外,如果点在为什么显示错误之前仅初始化两行?
如果我将行 policeManClone.transform.position = SetSpawnPosition(); 设置为 policeManClone.transform.position = spawnPositions[Random.Range(0, 6)]; 我没有任何错误。
确切的错误是:
NullReferenceException:对象引用未设置为 对象 GameControl.SetSpawnPosition () (在 资产/脚本/GameControl.cs:140) GameControl.AddPoliceMan () (在 资产/脚本/GameControl.cs:67) GameControl+c__Iterator0.MoveNext() (在 资产/脚本/GameControl.cs:92) UnityEngine.SetupCoroutine.InvokeMoveNext(IEnumerator 枚举器, IntPtr returnValueAddress) (在 C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
编辑
好吧,我知道这可能是另一回事。看起来Camera.current 给了我空值。在将其更改为公共变量并在检查器中分配主摄像头后,此错误似乎已得到纠正。问题是为什么 Camera.current 会导致 null?
【问题讨论】:
标签: c# unity3d nullreferenceexception coroutine