public BallMoveData(SSGameDataCtrl.LanQiuType type, Transform tr, SSBallAniCtrl ballAni, bool isYanWuBall)
 {
     m_LanQiuType  = type;
     m_RealBallTr  = tr;
     m_SSBallAni   = ballAni;
     IsYanWuTXBall = isYanWuBall;
 }
    public void Init(BallMoveData ballDt, float ballMoveSpeedBeiLv = 1f)
    {
        IsInitMoveBall       = true;
        m_BallMoveData       = ballDt;
        m_BallAni            = ballDt.m_SSBallAni;
        m_BallMoveSpeedBeiLv = ballMoveSpeedBeiLv;
        if (m_Rigidbody != null)
        {
            m_Rigidbody.useGravity = false;
        }

        if (ballDt.m_RealBallTr != null)
        {
            ballDt.m_RealBallTr.localEulerAngles = new Vector3(0f, UnityEngine.Random.Range(0f, 360f), 0f);
        }
        m_BallTweenRot = m_BallAni.m_BallData.m_BallSpawnTr.gameObject.GetComponent <TweenRotation>();

        SSGameDataCtrl.GetInstance().m_SSUIRoot.OnCreatExitGameUIEvent += OnCreatExitGameUIEvent;
        SSGameDataCtrl.GetInstance().m_SSUIRoot.OnRemoveExitGameUIEvent += OnRemoveExitGameUIEvent;
    }
    void SpawnGameBall(int indexBallSpawn = -1)
    {
        if (m_BallPrefabArray.Length <= 0)
        {
            Debug.LogWarning("m_BallPrefabArray -> m_BallPrefab is wrong!");
            return;
        }

        int randBallVal = Random.Range(0, 100) % m_BallPrefabArray.Length;

        if (m_BallPrefabArray[randBallVal] == null)
        {
            Debug.LogWarning("SpawnGameBall -> m_BallPrefabArray[" + randBallVal + "] is null");
            return;
        }

        if (m_SpawnPointTrArray.Length <= 0)
        {
            Debug.LogWarning("SpawnGameBall -> m_SpawnPointTrArray was wrong!");
            return;
        }

        int maxPointVal = SSGameDataCtrl.GetInstance().GetBallCreatRuleDt(IndexCreatBallJieDuan).MaxIndex;

        if (maxPointVal == 0 || maxPointVal > m_SpawnPointTrArray.Length)
        {
            maxPointVal = m_SpawnPointTrArray.Length;
        }

        int randVal = (indexBallSpawn == -1) ? Random.Range(0, 1000) % maxPointVal : indexBallSpawn;

        if (indexBallSpawn == -1 && m_LastIndexPoint == randVal)
        {
            //避免和上次的产生点索引相同.
            if (randVal > 0)
            {
                randVal--;
            }
            else
            {
                randVal++;
            }
        }

        if (m_SpawnPointTrArray[randVal] == null)
        {
            Debug.LogWarning("SpawnGameBall -> m_SpawnPointTrArray[" + randVal + "] is null");
            return;
        }

        m_LastIndexPoint = randVal;
        Transform  trSpawn = m_SpawnPointTrArray[randVal].transform;
        GameObject obj     = (GameObject)Instantiate(m_BallPrefabArray[randBallVal],
                                                     SSGameRootCtrl.GetInstance().BallCleanup, trSpawn);
        SSBallAniCtrl ballAni = obj.GetComponent <SSBallAniCtrl>();

        ballAni.Init(m_PlayerIndex, IndexCreatBallJieDuan);

        if (IsLianFaBall)
        {
            ballAni.m_BallMove.IsLastLianFaQiu = true;
            if (m_LianFaBallCount >= m_LianFaBallNum - 1)
            {
                //连发球的最后一个.
                ballAni.m_BallMove.IsLastLianFaQiu = true;
            }
            else
            {
                ballAni.m_BallMove.IsLastLianFaQiu = false;
            }
        }
    }