程序代码
using UnityEngine; using System.Collections; public class calDis : MonoBehaviour { public GameObject closestAnt,orgi;//orgi is a base point closeAnt is a sign public float distance; public float ttime=0; public GameObject[] gos; private GameObject next1,next2,next3,At1,At2,At3; private int i1,i2,i3; private bool sign=true; // Use this for initialization void Start () { orgi=GameObject.Find("Cube") ; Debug.Log(orgi); } void Update(){ ttime+=Time.deltaTime; if(ttime>=10f) { StartCoroutine("calculate"); ttime=0f; } } IEnumerator calculate() { gos=GameObject.FindGameObjectsWithTag("Ant"); yield return StartCoroutine("search1",orgi) ; // one Debug.Log("gggggggggg1"); Debug.Log(At1.GetInstanceID()); StopCoroutine("search1"); yield return StartCoroutine("search2",At1); Debug.Log("gggggggggg2"); Debug.Log(At2.GetInstanceID()); StopCoroutine("search2"); yield return StartCoroutine("search3",At2); Debug.Log("gggggggggg3"); Debug.Log(At3.GetInstanceID()); StopCoroutine("search3"); } //cal closest points A IEnumerator search1(GameObject clo) { distance=99999f; foreach(GameObject o in gos) { if(o!=clo) //culling points { float curdis=Vector3.Distance(clo.transform.position ,o.transform.position); if(curdis<distance) { distance=curdis; closestAnt=o; } } } //Debug.Log("Z");' At1=closestAnt; yield return closestAnt; } IEnumerator search2(GameObject clo) { distance=99999f; foreach(GameObject o in gos) { if(o!=clo&&o!=orgi) //culling points { float curdis=Vector3.Distance(clo.transform.position ,o.transform.position); if(curdis<distance) { distance=curdis; closestAnt=o; } } } At2=closestAnt; yield return closestAnt; } IEnumerator search3(GameObject clo) { distance=99999f; bool findObject=false; foreach(GameObject o in gos) { if(o!=clo&&o!=orgi&&o!=At1) //culling points { float curdis=Vector3.Distance(clo.transform.position ,o.transform.position); if(curdis<distance) { distance=curdis; closestAnt=o; findObject=true; } } } if(!findObject) { yield return null; Debug.Log("no one for 3"); } else { At3=closestAnt; Debug.Log("ddddd"+At3); yield return closestAnt; } } }