代码如下:
unity报错内容为:InvalidOperationException: Collection was modified; enumeration operation may not execute.
麻烦各位了帮忙改一下,貌似问题在listener.GestureCompleted这个上面,好像是使用了foreach了之后,不能修改或者删除数据造成的,这一份源码是kinect里面的KinectManager.cs这份代码里面的报错。
因为不熟悉foreach把一个类,转换到继承的类,并且还使用的是list,所以我就懵了
// Check for complete gestures
List<KinectGestures.GestureData> gesturesData = playerGesturesData[userId];
int userIndex = GetUserIndexById(userId);
foreach(KinectGestures.GestureData gestureData in gesturesData)
{
if (gestureData.complete)
{
// if(gestureData.gesture == KinectGestures.Gestures.Click)
// {
// if(controlMouseCursor)
// {
// MouseControl.MouseClick();
// }
// }
foreach(KinectGestures.GestureListenerInterface listener in gestureListeners)
{
if(listener != null && listener.GestureCompleted(userId, userIndex, gestureData.gesture, (KinectInterop.JointType)gestureData.joint, gestureData.screenPos))
{
ResetPlayerGestures(userId);
}
}
}
else if(gestureData.cancelled)
{
foreach(KinectGestures.GestureListenerInterface listener in gestureListeners)
{
if(listener != null && listener.GestureCancelled(userId, userIndex, gestureData.gesture, (KinectInterop.JointType)gestureData.joint))
{
ResetGesture(userId, gestureData.gesture);
}
}
}
else if(gestureData.progress >= 0.1f)
{
// if((gestureData.gesture == KinectGestures.Gestures.RightHandCursor ||
// gestureData.gesture == KinectGestures.Gestures.LeftHandCursor) &&
// gestureData.progress >= 0.5f)
// {
// if(handCursor != null)
// {
// handCursor.transform.position = Vector3.Lerp(handCursor.transform.position, gestureData.screenPos, 3 * Time.deltaTime);
// }
//
// if(controlMouseCursor)
// {
// MouseControl.MouseMove(gestureData.screenPos);
// }
// }
foreach(KinectGestures.GestureListenerInterface listener in gestureListeners)
{
if(listener != null)
{
listener.GestureInProgress(userId, userIndex, gestureData.gesture, gestureData.progress,
(KinectInterop.JointType)gestureData.joint, gestureData.screenPos);
}
}
}
}