深度优先搜索相对简单一点,就不说了,不过广度也有其用处,比如想找到一个人物骨骼的一个节点,在比较浅的层级时,用深度搜索可能是很浪费的
当然,这个改改条件,用在其它地方也是可以的。。。
上代码,顺便试试代码块
/// <summary>
/// 广度搜索
/// </summary>
public class BTFind {
Transform root;
Queue queue;
public BTFind(Transform root) {
this.root = root;
queue = new Queue();
}
/// <summary>
/// 按名字查找
/// </summary>
/// <param name="objName">名字</param>
/// <param name="st">类型,名字相等或包含0为相等,1为包含</param>
/// <returns></returns>
public Transform FindByName(string objName, int st) {
queue.Clear();
queue.Enqueue(root);
return search(queue, objName, st);
}
private Transform search(Queue q, string name, int st) {
Transform t = (Transform)queue.Dequeue();
switch (st) {
case 0:
if (t.name == name)
return t;
break;
case 1:
if (t.name.Contains(name))
return t;
break;
default:
if (t.name == name)
return t;
break;
}
if (q.Count <=0 && t.childCount <= 0)
return null;
foreach (Transform ct in t) {
queue.Enqueue(ct);
}
return search(q, name, st);
}
}