为什么循环崩溃而不打印? Unity3D
Why does loop crash and and not print? Unity3D
给定一个立方体 space,此函数搜索下一个大的空 space,在那里放置一个标记,然后退出。
但是,该函数甚至不打印循环开始之前存在的检查消息,所以我不知道如何调试它。检查从 0,0,0 开始,体素外的 spaces 返回为真,因此它应该默认所有第一个循环并发回消息。 unity.exe 进程卡住,我不得不中止它。
为什么打印不出来?还有什么问题呢?即使它很慢,我也应该能够跟踪循环内的进度吗?为什么不呢?
function findvoidable() //find void space in voxel volume
{
var step = dist+1;
print("start"); WaitForFixedUpdate(); //this doesnt print
for ( var k : int = 0; k < mesher.PNGpaths.Length ; k+=step/2)
for ( var j = 0; j < mesher.tex.height ; j+=step/2)
for ( var i = 0; i < mesher.tex.width ; i+=step/2){
print("in schema");WaitForFixedUpdate();
if (wst( i , j , k )==false )
if (wst( i+step,j ,k )==false )
if (wst( i-step,j ,k )==false )
if (wst( i ,j+step,k )==false )
if (wst( i ,j-step,k )==false )
if (wst( i ,j ,k+step )==false )
if (wst( i ,j ,k-step )==false )
{
var cnt=0;
for ( var x = i-step; x < i+step ; x+=1)
for ( var y = j-step; y < j+step ; y+=1)
for ( var z = k-step; z < k+step ; z+=1)
{
if ( wst( x , y , z ) == false )
cnt+=1;
}
if ( cnt >= step*step*step-3 )
{
refCube.transform.position=Vector3(i,j,k);
break;break;break;break;break;break;
}
else
{
WaitForFixedUpdate();
refCube.transform.position=Vector3(i,j,k);
}
}
}
}
WaitForFixedUpdate
是协程,不应像普通方法那样 运行。
相反,尝试 "yield" 语句:
yield WaitForFixedUpdate();
更多信息:https://docs.unity3d.com/ScriptReference/Coroutine.html
给定一个立方体 space,此函数搜索下一个大的空 space,在那里放置一个标记,然后退出。
但是,该函数甚至不打印循环开始之前存在的检查消息,所以我不知道如何调试它。检查从 0,0,0 开始,体素外的 spaces 返回为真,因此它应该默认所有第一个循环并发回消息。 unity.exe 进程卡住,我不得不中止它。
为什么打印不出来?还有什么问题呢?即使它很慢,我也应该能够跟踪循环内的进度吗?为什么不呢?
function findvoidable() //find void space in voxel volume
{
var step = dist+1;
print("start"); WaitForFixedUpdate(); //this doesnt print
for ( var k : int = 0; k < mesher.PNGpaths.Length ; k+=step/2)
for ( var j = 0; j < mesher.tex.height ; j+=step/2)
for ( var i = 0; i < mesher.tex.width ; i+=step/2){
print("in schema");WaitForFixedUpdate();
if (wst( i , j , k )==false )
if (wst( i+step,j ,k )==false )
if (wst( i-step,j ,k )==false )
if (wst( i ,j+step,k )==false )
if (wst( i ,j-step,k )==false )
if (wst( i ,j ,k+step )==false )
if (wst( i ,j ,k-step )==false )
{
var cnt=0;
for ( var x = i-step; x < i+step ; x+=1)
for ( var y = j-step; y < j+step ; y+=1)
for ( var z = k-step; z < k+step ; z+=1)
{
if ( wst( x , y , z ) == false )
cnt+=1;
}
if ( cnt >= step*step*step-3 )
{
refCube.transform.position=Vector3(i,j,k);
break;break;break;break;break;break;
}
else
{
WaitForFixedUpdate();
refCube.transform.position=Vector3(i,j,k);
}
}
}
}
WaitForFixedUpdate
是协程,不应像普通方法那样 运行。
相反,尝试 "yield" 语句:
yield WaitForFixedUpdate();
更多信息:https://docs.unity3d.com/ScriptReference/Coroutine.html