using UnityEngine; using System.Collections; using System.Reflection; using Games.Scene; public class GlobalEffectMgr { public static float PlayCameraBlur() { //return SceneSwitchScreen.instance == null ? 0f : // SceneSwitchScreen.instance.StartAnimation(); var delayTime = 1f; if (SceneLogic.CameraController != null) { var effectComponent = SceneLogic.CameraController.AddCameraEffect(CameraBlurCreateFunc); delayTime = effectComponent.enterTime + effectComponent.exitTime; } //if (SceneLogic.CameraController != null) //{ // var effect = SceneLogic.CameraController.AddCameraEffect(CameraRadialBlurFunc); // delayTime = effect.enterTime + effect.exitTime; //} return delayTime; } //public static void FadeCameraBlur() //{ // if (SceneLogic.CameraController != null && // SceneLogic.CameraController.MainCamera != null) // { // var effect = SceneLogic.CameraController.MainCamera.GetComponent(); // if (effect) // effect.Exit(); // } //} private static void CameraRadialBlurFunc(CameraRadialBlur cameraRadialBlur) { var blurGo = CommonUtility.LoadFromResources("CameraRadiusBlur"); var orgCameraBlur = blurGo.GetComponent(); CopyComponent(orgCameraBlur, cameraRadialBlur); } private static void CameraBlurCreateFunc(CameraSpaceBlur cameraSpaceBlur) { var blurGo = CommonUtility.LoadFromResources("Material/CameraBlurGO"); var orgCameraBlur = blurGo.GetComponent(); CopyComponent(orgCameraBlur, cameraSpaceBlur); } public static void PlayRedPacketRain() { LoadAssetBundle.Instance.LoadGameObject(LoadAssetBundle.BUNDLE_PATH_EFFECT, "TX_hongbao", LoadRedPacketFinish, null); } public static void LoadRedPacketFinish(string modelName, GameObject resObj, Hashtable hashParam) { var effectInstance = GameObject.Instantiate(resObj); effectInstance.transform.SetParent(UIManager.Instance().UIEffectRoot.transform); effectInstance.SetActive(true); effectInstance.transform.localPosition = Vector3.zero; effectInstance.transform.localRotation = Quaternion.Euler(Vector3.zero); effectInstance.transform.localScale = Vector3.one; GameObject.Destroy(effectInstance, 10.0f); } static void CopyComponent(object original, object destination) { System.Type type = original.GetType(); System.Reflection.FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); foreach (System.Reflection.FieldInfo field in fields) { field.SetValue(destination, field.GetValue(original)); } } #region normal effect public static float _NormalEffectPlayTime = 3.0f; public static void PlayerNormalEffect(string effectName) { PlayerNormalEffect(effectName, Vector3.zero); } public static void PlayerNormalEffect(string effectName, Vector3 position,float continueTime = 0) { Hashtable hash = new Hashtable(); hash.Add("Position", position); if(continueTime>0) hash.Add("time", continueTime); LoadAssetBundle.Instance.LoadGameObject(LoadAssetBundle.BUNDLE_PATH_EFFECT, effectName, LoadNormalEffect, hash); } public static void StopNormalEffect(string effectName) { if(UIManager.Instance()!=null && UIManager.Instance().UIEffectRoot!=null) { Transform[] childs = UIManager.Instance().UIEffectRoot.transform.GetComponentsInChildren(); for(int i=0;i(); if(effectScript != null) { effectScript.Init(); } effectInstance.name = effectName; effectInstance.SetActive(true); effectInstance.transform.localPosition = Vector3.zero; if (hashParam.ContainsKey("Position")) { effectInstance.transform.position = (Vector3)hashParam["Position"]; } var layer = LayerMask.NameToLayer("UI"); effectInstance.layer = layer; Transform[] childs = effectInstance.GetComponentsInChildren(); for (int i = 0; i < childs.Length; i++) childs[i].gameObject.layer = layer; effectInstance.transform.localRotation = Quaternion.Euler(Vector3.zero); effectInstance.transform.localScale = Vector3.one; if(hashParam.ContainsKey("time")) { GameObject.Destroy(effectInstance,(float)hashParam["time"]); } else GameObject.Destroy(effectInstance, _NormalEffectPlayTime); //var parcSysComs = effectInstance.GetComponentsInChildren(); //for(int index = 0; index < parcSysComs.Length; index++) //{ // parcSysComs[index].Stop(); // parcSysComs[index].Play(); //} resObj.SetActive(false); resObj.SetActive(true); } #endregion }