当需要对一个List数组中的成员进行排序时,可以用List.Sort()方法。但如果需要对List数组中成员进行统一处理后再排序时,使用foreach对数组进行修改并输出新数组未免过于麻烦。
如游戏中有多名敌人,我们使用Unity中的GetComponentsWithTag方法,将当前地图中的敌人存储到数组中。
public List<Transform> EnemyTransform;
void Start(){
EnemyTransform=GameObject.GetComponentsWithTag("Enemy").transform;
//将所有“Enemy”标签的物体的transform属性添加到EnemyTransform中
}
然后我们需要将敌人与玩家的距离进行计算排序,方便玩家切换目标。
public void EnemyTransformSort(){
EnemyTransform.Sort(delegate(Transform T1,Transform T2)){
Return (Vector3.Distance(T1.position,Player.transform.positon).Compareto(Vector3.Distance(T2.position,Player.transform.positon)));
}
}
也可以使用lambda表达式进行简写
public void EnemyTransformSort(){
EnemyTransform.Sort((Transform T1,Transform T2)=>
Vector3.Distance(T1.position,Player.transform.positon).Compareto(Vector3.Distance(T2.position,Player.transform.positon)));
}
这种方法其实是使用了Comparison委托
public void Sort(Comparison<T> comparison);
该委托将对传入参数进行对比,如T1<T2则返回-1,T1>T2则返回1,相等返回0
.