예제 #1
0
    //*****************************************************************************
    // AI can change it's formation to a new one after it deliver or receive a goal.
    //*****************************************************************************
    public IEnumerator changeFormation(int _formationIndex, float _speed)
    {
        //cache the initial position of all units
        List <Vector3> unitsSartingPosition = new List <Vector3>();

        foreach (var unit in myTeam)
        {
            unitsSartingPosition.Add(unit.transform.position);                  //get the initial postion of this unit for later use.
            unit.GetComponent <MeshCollider>().enabled = false;                 //no collision for this unit till we are done with re positioning.
        }

        float t = 0;

        while (t < 1)
        {
            t += Time.deltaTime * _speed;
            for (int cnt = 0; cnt < myTeam.Length; cnt++)
            {
                myTeam[cnt].transform.position = new Vector3(Mathf.SmoothStep(unitsSartingPosition[cnt].x,
                                                                              FormationManager.getPositionInFormation(_formationIndex, cnt).x * -1,
                                                                              t),
                                                             Mathf.SmoothStep(unitsSartingPosition[cnt].y,
                                                                              FormationManager.getPositionInFormation(_formationIndex, cnt).y,
                                                                              t),
                                                             FormationManager.fixedZ);

                /*
                 * myTeam[cnt].transform.position.x = Mathf.SmoothStep(	unitsSartingPosition[cnt].x,
                 *                                                                                                              FormationManager.getPositionInFormation(_formationIndex, cnt).x * -1,
                 *                                                                                                              t);
                 * myTeam[cnt].transform.position.y = Mathf.SmoothStep(	unitsSartingPosition[cnt].y,
                 *                                                                                                              FormationManager.getPositionInFormation(_formationIndex, cnt).y,
                 *                                                                                                              t);
                 * myTeam[cnt].transform.position.z = FormationManager.fixedZ;
                 */
            }
            yield return(0);
        }

        if (t >= 1)
        {
            canChangeFormation = true;
            foreach (var unit in myTeam)
            {
                unit.GetComponent <MeshCollider>().enabled = true;                      //collision is now enabled.
            }
        }
    }