// 对收集到的高亮对象列表进行排序,确保按照正确的交互顺序排列 stepHighlightObj.Sort(SortInteractiveObj); }
/// <summary> /// 比较并排序两个交互物体的索引,用于确定它们在教程步骤中的显示顺序。 /// </summary> /// <param name="obj1">第一个用于比较的交互物体游戏对象。</param> /// <param name="obj2">第二个用于比较的交互物体游戏对象。</param> /// <returns>如果obj1的索引小于obj2,则返回负数;如果obj1的索引大于obj2,则返回正数;如果两者相等,则返回0。</returns> private int SortInteractiveObj(GameObject obj1, GameObject obj2) { if (obj1.GetComponent<StepManager>().myIndex > obj2.GetComponent<StepManager>().myIndex) return 1; else return -1; }这里调用SortInteractiveObj方法为什么不用传参数
实际上,在C#中,当你在调用List<T>.Sort(Comparison<T>)方法时,你不需要显式传递参数给自定义的比较函数(在这个例子中是SortInteractiveObj方法)。这是因为List<T>.Sort方法会自动为你处理参数传递。当列表排序时,Sort方法内部会根据列表中的元素,逐一取出两个元素作为参数,调用你提供的比较委托(在这里是SortInteractiveObj方法)来决定它们的排序关系。
所以,当你写下stepHighlightObj.Sort(SortInteractiveObj);这一行代码时,Unity(或者说C#)知道如何使用SortInteractiveObj方法来比较stepHighlightObj列表中的元素,即使你在SortInteractiveObj定义中没有直接提供参数。这里SortInteractiveObj方法签名中的GameObject obj1和GameObject obj2会在排序过程中自动被赋予列表中的实际对象进行比较。