Unity触发循环时无报错冻结,硅酸盐行星成分生成脚本故障求助
问题原因
你遇到的Unity冻结是代码出现死循环导致的,问题出在iod >= 2的分支逻辑里:
- 当
ironOxide是两位数时,初始iod值为2,进入分支后执行这段逻辑:
int temp = 0; while (iod > 2) { iod = iod - 1; temp = temp + 1; } iod = temp;
此时iod=2不满足iod>2的循环条件,temp保持为0,最终iod被赋值为0。
2. 接下来执行的循环判断条件为tens.ToString().Length > iod,也就是判断数字转字符串的长度是否大于0。但任何整数转字符串的长度最小为1(哪怕数字是0,转字符串结果是"0",长度为1),这个条件永远成立,循环会无限执行,直接卡住Unity主线程。
另外你代码里还有一个语法错误:if (tens = 1)用了赋值运算符=而非比较运算符==,这个写法在C#里属于非法语法,你后续调整逻辑的时候需要修正。
修复方案
你原本的逻辑是想把ironOxide的位数降到2位对吧?不需要这么复杂的循环计算,直接用更简单的逻辑实现即可:
// 替换你原来iod >= 2分支里的所有代码 // 只要数值超过两位数就除以10,直到变成两位数及以下 while(ironOxide >= 100) { ironOxide /= 10; }
同时你原来的total = total - t这行逻辑其实没有生效,因为你后续调整ironOxide之后没有重新计算total值,记得调整完所有元素的数值后重新计算一次total,再给silicone赋值。
内容的提问来源于stack exchange,提问作者Klushy225
相关产品推荐
相关产品推荐

