佚名通过本文主要向大家介绍了服务窗口存在问题,窗口存在问题,窗口单位存在的问题,obs 窗口录制问题,窗口单位问题清单等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于添加与关闭窗口的问题
描述:
这是我从书上写的代码
可是运行之后出现这种错误
ArgumentOutOfRangeException: Less than 0 or more than list count.
Parameter name: index
0
System.Collections.ArrayList.ThrowNewArgumentOutOfRangeException (System.String name, System.Object actual, System.String message) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections/ArrayList.cs:3261)
System.Collections.ArrayList.RemoveAt (Int32 index) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections/ArrayList.cs:3019)
添加与关闭敞口.AddWindow (Int32 windowID) (at Assets/添加与关闭敞口.js:43)
UnityEngine.GUILayout+LayoutedWindow.DoWindow (Int32 windowID) (at C:/buildslave/unity/build/Runtime/IMGUI/Managed/GUILayout.cs:485)
UnityEngine.GUI.CallWindowDelegate (UnityEngine.WindowFunction func, Int32 id, UnityEngine.GUISkin _skin, Int32 forceRect, Single width, Single height, UnityEngine.GUIStyle style) (at C:/buildslave/unity/build/Runtime/IMGUI/Managed/GUI.cs:1869)
昨天搞了很久都没找到解决办法 。。。
求助各位大神
解决方案1:
描述:
窗口添加unity3D
//使用Arraylist存储窗口
var winArrayList = new ArrayList();
//图标
var icon : Texture;
function Start () {
//添加一个窗口
winArrayList.Add(Rect(winArrayList.Count*100,50,150,100));
}
function OnGUI () {
//遍历每个窗口,并且加入视图
var count = winArrayList.Count;
for(var i = 0 ; i < count ; i++)
{
winArrayList[i]=GUILayout.Window(i,winArrayList[i],AddWindow, "窗口ID: "+i);
}
}
function AddWindow (windowID:int)
{
//开始一个水平布局
GUILayout.BeginHorizontal();
//绘制图标
GUILayout.Label(icon,GUILayout.Width(50),GUILayout.Height(50));
//绘制文字
GUILayout.Label("这是一个全新的窗口");
//关闭水平布局
GUILayout.EndHorizontal();
//开始一个水平布局
GUILayout.BeginHorizontal();
if(GUILayout.Button("添加新窗口"))
{
//添加窗口
winArrayList.Add(Rect(winArrayList.Count*100,50,150,100));
}
if(GUILayout.Button("关闭当前窗口"));
{
//关闭窗口
winArrayList.RemoveAt(windowID);
}
//关闭水平布局
GUILayout.EndHorizontal();
//设置窗口拖动的区域
GUI.DragWindow(Rect(0,0,Screen.width,Screen.height));
}
这是我从书上写的代码
可是运行之后出现这种错误
ArgumentOutOfRangeException: Less than 0 or more than list count.
Parameter name: index
0
System.Collections.ArrayList.ThrowNewArgumentOutOfRangeException (System.String name, System.Object actual, System.String message) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections/ArrayList.cs:3261)
System.Collections.ArrayList.RemoveAt (Int32 index) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections/ArrayList.cs:3019)
添加与关闭敞口.AddWindow (Int32 windowID) (at Assets/添加与关闭敞口.js:43)
UnityEngine.GUILayout+LayoutedWindow.DoWindow (Int32 windowID) (at C:/buildslave/unity/build/Runtime/IMGUI/Managed/GUILayout.cs:485)
UnityEngine.GUI.CallWindowDelegate (UnityEngine.WindowFunction func, Int32 id, UnityEngine.GUISkin _skin, Int32 forceRect, Single width, Single height, UnityEngine.GUIStyle style) (at C:/buildslave/unity/build/Runtime/IMGUI/Managed/GUI.cs:1869)
昨天搞了很久都没找到解决办法 。。。
求助各位大神
解决方案1:
ArgumentOutOfRangeException
数组访问越界错误。
具体在 这句代码
//关闭窗口
winArrayList.RemoveAt(windowID);
这个windowID越界了。
在删除之前应该判断这个id存不存在