Unity3D中的IL代码错误无效
我试图使用perlin noise使用Unity3D(版本5.0.2f1)生成terain,但出现以下错误:Unity3D中的IL代码错误无效,unity3d,unityscript,perlin-noise,Unity3d,Unityscript,Perlin Noise,我试图使用perlin noise使用Unity3D(版本5.0.2f1)生成terain,但出现以下错误: InvalidProgramException: Invalid IL code in TerrainGenerator:GenerateFloor (): IL_0045: call 0x0a00000c TerrainGenerator.Generate () (at Assets/TerrainGenerator.js:36) TerrainGenerator.Sta
InvalidProgramException: Invalid IL code in TerrainGenerator:GenerateFloor (): IL_0045: call 0x0a00000c
TerrainGenerator.Generate () (at Assets/TerrainGenerator.js:36)
TerrainGenerator.Start () (at Assets/TerrainGenerator.js:23)
代码:
函数GenerateFloor(){
打印(“调用函数”);
如果(!(种子>0)){
Debug.LogError(“Seed无效。Seed:+Seed+”);
种子=随机范围(0,10000000000000);
LogError(“生成的新seed.seed:+seed+”);
}
对于(var i=0;iMath.Sqrt(size))Debug.LogError(“这是怎么发生的?!currentX=“+currentX+”size=“+size+”);
var高度=数学PerlinNoise(电流x,电流z);
heightMap[currentX*currentZ]=新矢量3(currentX,height,currentZ);
打印(“循环工作”);
//产量;
}
}
随机输入参数10000000000000。范围超出最大值。也许你想要int.MaxValue?也就是2147483647
有趣的是,它导致了IL2CPP的编译器错误 您能否指定,从何处获得此错误?在编辑器中编译脚本时?或者当您尝试为目标平台构建时?或者当你在编辑器中开始游戏时?此外,在错误中我看到了
TerrainGenerator.Generate()(位于Assets/TerrainGenerator.js:36)
和TerrainGenerator.Start()(位于Assets/TerrainGenerator.js:23)
,但在您提供的代码中没有名为Generate
或Start
的方法。你也能提供它们吗?顺便说一句,可能不是问题,但是你的参数100000000000000是随机的。范围超出了最大值。也许您想要int.MaxValue
?“那将是2147483647。”@peterept信不信由你,这确实是个问题。现在可以了。非常感谢达哈。杰出的值得将Unity作为一个bug进行归档。我在下面为其他遇到类似问题的人写了一个答案。
function GenerateFloor(){
print("The function was called");
if(!(seed > 0)){
Debug.LogError("Seed not valid. Seed: " + seed + " .");
seed = Random.Range(0, 1000000000000000);
Debug.LogError("Generated new seed. Seed: " + seed + ".");
}
for(var i = 0; i < heightMap.length; i++){
if(currentX == Math.Sqrt(size)){
currentX = 0;
currentZ++;
}
else if(currentX > Math.Sqrt(size)) Debug.LogError("How did this happen?! currentX = " + currentX + " size = " + size + " .");
var height = Mathf.PerlinNoise(currentX, currentZ);
heightMap[currentX * currentZ] = new Vector3(currentX, height, currentZ);
print("For loop worked");
//yield;
}
}