
你使用public Text[] 定义数组,表示该数组的长度在没有赋值之前是不确定的,因此你在代码中就不能用text[1]、text[2]这样的方式去赋值,否则系统会默认你的textLength有固定值且为3。因为你的语句和你面板中的元素个数恰好相等(即textLength==3),所以虽然会报错但仍旧可以运行。假使你面板中的元素少于3个(即textLength<3),而text[2]的出现就会让系统认为textLength有固定值且为3,这里就出现了矛盾,运行到text[2]那一行就一定会报错,那时你的脚本就不能运行了。
修改方式(因没有具体代码就只好)有以下几种给你参考:
直接定义public Text[3] text,在面板中拉取。(适用于已经知道元素总个数为3但不知道是哪些元素,代码量相对较少)
2在脚本中使用GameObjectFind("angle01")形式或者其他形式去给数组赋值,不要在面板中拉取。(适用于已经知道元素也知道元素总个数,代码相对变多但此种方式在企业中最为安全可靠)
3以上两种方式都没有加入面向对象思想,最好的方式是寻找angle01、angle02、angle03三个元素之间、与数组下标之间的内在联系,通过代码表达出来,且该代码对angle04、angle05等等元素也同样适用,那么在对数组赋值时候,使用该代码就能很好地减少重复性语句,另外记得要用textLength限制元素最大个数,且不要随便出现数组下标大于1的语句(可以出现下标为0的)。(适用于未知是何种元素也未知元素个数,代码量不用说肯定比上面两个多得多)
/// 使用委托调用、或者使用协程。
private void AsyncExcute(){
/// 做你的List<obj> *** 作
}
CallSubThread(AsyncExcute);
public void CallSubThread(Action action){
var thread = new Thread(RunAction);
threadStart(action);
}
private void RunAction(object action){
((Action)action)();
}
二维数组的赋值分两种情况:
1、定义时初始化赋值
int a[2][4]={ {1,2,3,4}, {5,6,7,8} };
2、定义后,进行数组元素赋值
int a[2][4];int i,j;for( i=0;i<2;i++ ) //行{ for( j=0;j<4;j++ ) //列 { a[i][j]=i4+j+1 ; //逐个给每一个元素赋值 }}//以上赋值完成后,与初始化赋值得到的内容是相同的。
二维数组的输出,只能逐行遍历二维数组,逐个输出每一个元素。如:
//接前面代码for( i=0;i<2;i++ ) //行{ for( j=0;j<4;j++ ) //列 { printf( "%d ", a[i][j] ); //逐个输出每一个元素,数据间以空格间隔 } printf("\n");//输出一行后,换行显示}
以上就是关于unity3D 中数组越界的问题全部的内容,包括:unity3D 中数组越界的问题、Unity c# 如何在子线程中调用对象数组(List<obj>)的indexof、在unity中如何对二维数组进行初始赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)