示例#1
0
    private IEnumerator HandleOffMeshLink()
    {
        while (true)
        {
            if (m_agent.isOnOffMeshLink)
            {
                OffMeshLinkData data = m_agent.currentOffMeshLinkData;
                OffMeshLink     link = data.offMeshLink;
                link.costOverride += 1;

                Collider[] hitColliders = Physics.OverlapSphere(transform.position, 5);
                foreach (Collider col in hitColliders)
                {
                    UnitController unit = col.GetComponent <UnitController>();
                    if (null != unit && !unit.GetAgent().isOnOffMeshLink&&
                        link.Equals(unit.GetAgent().nextOffMeshLinkData.offMeshLink))
                    {
                        unit.RecalculatePathUnit();
                    }
                }

                while (m_agent.transform.position != data.endPos)
                {
                    m_agent.transform.position = Vector3.MoveTowards(m_agent.transform.position, data.endPos, m_agent.speed * Time.deltaTime);
                    yield return(null);
                }

                if (m_agent.isOnNavMesh)
                {
                    m_agent.CompleteOffMeshLink();
                }

                link.costOverride -= 1;
            }
            yield return(null);
        }
    }