/// <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)); }
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); } }
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); }
/// <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)); }