//Moves Invader in horizontal Axis
        private IEnumerator UpdateInvaderMovementHoriZontal()
        {
            m_firableColumnReady = false;
            Invader[] firableColumn = new Invader[m_invaderRows[0].Length];

            // we also calulate the firing coumn here to avoid another itration

            for (int i = m_invaderRows.Length - 1; i >= 0; i--)
            {
                Invader[] invaderRow = m_invaderRows[i];
                for (int j = 0; j < m_gridColumns; j++)
                {
                    Invader invader = invaderRow[j];
                    if (invader != null)
                    {
                        Vector3 horizontalDeltaMove = new Vector3(m_invaderHorMovDirection * m_horizonatalVeleocity, 0, 0); // calculate new move delta
                        invader.Move(horizontalDeltaMove);
                        invader.PlayAnimation();

                        if (firableColumn[j] == null)
                        {
                            firableColumn[j] = invader;
                        }
                    }
                }

                yield return(new WaitForSeconds(m_moveUpdateInterval / m_invaderRows.Length));
            }

            m_firableColumn      = firableColumn;
            m_firableColumnReady = true;
            yield return(null);
        }
 // Moves Invader in vertical down Axis when the horizonatl move reach on the boundary
 private void UpdateInvaderMovementVertical()
 {
     for (int i = m_invaderRows.Length - 1; i >= 0; i--)
     {
         Invader[] invaderRow = m_invaderRows[i];
         for (int j = 0; j < m_gridColumns; j++)
         {
             Invader invader = invaderRow[j];
             if (invader != null)
             {
                 Vector3 verticallDeltaMove = new Vector3(0, -m_verticalVeleocity * 1.0f, 0);
                 invader.Move(verticallDeltaMove);
                 invader.PlayAnimation();
             }
         }
     }
 }