Exemplo n.º 1
0
 /// <summary>
 /// 搖晃物件;
 /// fShakeAmount為 一倍時;位移量各為1,請視情況修改fShakeAmount(力道)
 /// </summary>
 /// <param name="gameobject">要使用的攝影機或遊戲物件</param>
 /// <param name="fShakeDuration">總執行時間,預設為0秒</param>
 /// <param name="fDelayTime">延遲呼叫的時間,預設為0秒</param>
 /// <param name="fShakeAmount">搖晃的力道,最後會乘上這個數值,可以當作倍率,預設為一倍</param>
 /// <param name="_eShakeType">搖晃的類型;目前提供 垂直、水平、垂直+水平、圓球(三軸)
 /// 預設為垂直+水平</param>
 /// <param name="tccCalllbackComplete">完成事件後將會被呼叫的函式,會回傳原本註冊
 /// 的GameObject</param>
 /// <param name="bUsePause">是否可被暫停,預設為不可被暫停</param>
 public static int ShakeGameObject(GameObject gameobject, float fShakeDuration = 0f,
                                   float fDelayTime                = 0, float fShakeAmount = 1f,
                                   eShakeType _eShakeType          = eShakeType.VerticalAndHorizontal,
                                   ccCallback tccCalllbackComplete = null, bool bUsePause = false)
 {
     object[] obj = new object[5];
     obj[0] = gameobject.transform;
     obj[1] = gameobject.transform.localPosition;
     obj[2] = fShakeAmount;
     obj[3] = _eShakeType;
     obj[4] = tccCalllbackComplete;
     return(ccUpdateEvent.Instance.f_RegEvent(fShakeDuration, Shake, fDelayTime, ShakeComplete, obj, bUsePause));
 }
Exemplo n.º 2
0
        private static void ShakeComplete(object data, float fTime)
        {
            object[]   obj          = ( object[] )data;
            Transform  camTransform = ( Transform )obj[0];
            Vector3    originalPos  = ( Vector3 )obj[1];
            ccCallback _ccCallback  = ( ccCallback )obj[4];

            if (camTransform)
            {
                _ccCallback(camTransform.gameObject);
                camTransform.localPosition = originalPos;
            }
            else
            {
                Debug.LogError("CameraShake 找不到當初註冊搖晃的物件");
                _ccCallback(null);
            }
        }
Exemplo n.º 3
0
 private int f_RegEventForTeam(float fDelayTime, bool bRePeat, object oData, ccCallback tccCallback, bool bUsePause)
 {
     if ((tccCallback != null) && (fDelayTime >= 0f))
     {
         float      fTemp   = fDelayTime / _fDelayTime;
         sTimeEvent tClass1 = new sTimeEvent
         {
             iId            = ++iKeyId,
             m_fDelayTime   = fDelayTime,
             m_fSurplusTime = fDelayTime,
             //4捨5入  3.05f = 31次, 3.049f = 30次 ,4捨5入取到小數點第二位
             iExcuteCount = ccCommonClass.Round(fTemp, 0),
             m_bRepeat    = bRePeat,
             m_oData      = oData,
             m_ccCallback = tccCallback,
             m_bUsePause  = bUsePause
         };
         _aTimeEventList.Add(tClass1);
         this.Init();
         return(( int )tClass1.iId);
     }
     return(-99);
 }
Exemplo n.º 4
0
 /// <summary>
 /// 對 ccTimeEvent 註冊 Invoke 計時器事件 ,
 /// 將會返回一個為int類型的 iEventId 解除事件(f_UnRegEvent)使用,如需使用請自行作變數紀錄。
 /// </summary>
 /// <param name="fDelayTime">一開始Delay的時間</param>
 /// <param name="bRePeat">是否重複執行,預設為不重複,只執行一次</param>
 /// <param name="tccCallback">會被呼叫的函數</param>
 /// <param name="bUsePause">此事件是否可以被暫停,可不填,預設為不可被暫停</param>
 /// <param name="oData">可提供一個可以回傳的參數,如int,GameObject等,可不填,預設為Null</param>
 /// <returns></returns>
 public int f_RegEvent(float fDelayTime, ccCallback tccCallback, bool bRePeat = false, bool bUsePause = false, object oData = null)
 {
     return(this.f_RegEventForTeam(fDelayTime, bRePeat, oData, tccCallback, bUsePause));
 }