152 lines
5.7 KiB
C#
152 lines
5.7 KiB
C#
|
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<CameraSpaceBlur>(CameraBlurCreateFunc);
|
|||
|
delayTime = effectComponent.enterTime + effectComponent.exitTime;
|
|||
|
}
|
|||
|
//if (SceneLogic.CameraController != null)
|
|||
|
//{
|
|||
|
// var effect = SceneLogic.CameraController.AddCameraEffect<CameraRadialBlur>(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<CameraRadialBlur>();
|
|||
|
// if (effect)
|
|||
|
// effect.Exit();
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
private static void CameraRadialBlurFunc(CameraRadialBlur cameraRadialBlur)
|
|||
|
{
|
|||
|
var blurGo = CommonUtility.LoadFromResources<GameObject>("CameraRadiusBlur");
|
|||
|
var orgCameraBlur = blurGo.GetComponent<CameraRadialBlur>();
|
|||
|
CopyComponent(orgCameraBlur, cameraRadialBlur);
|
|||
|
}
|
|||
|
|
|||
|
private static void CameraBlurCreateFunc(CameraSpaceBlur cameraSpaceBlur)
|
|||
|
{
|
|||
|
var blurGo = CommonUtility.LoadFromResources<GameObject>("Material/CameraBlurGO");
|
|||
|
var orgCameraBlur = blurGo.GetComponent<CameraSpaceBlur>();
|
|||
|
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<Transform>();
|
|||
|
for(int i=0;i<childs.Length;i++)
|
|||
|
{
|
|||
|
if(childs[i].name == effectName)
|
|||
|
{
|
|||
|
childs[i].gameObject.SetActive(false);
|
|||
|
GameObject.Destroy(childs[i].gameObject);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void LoadNormalEffect(string effectName, GameObject resObj, Hashtable hashParam)
|
|||
|
{
|
|||
|
var effectInstance = GameObject.Instantiate(resObj);
|
|||
|
effectInstance.transform.SetParent(UIManager.Instance().UIEffectRoot.transform);
|
|||
|
UIParticleSystem effectScript = effectInstance.EnsureComponent<UIParticleSystem>();
|
|||
|
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<Transform>();
|
|||
|
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<ParticleSystem>();
|
|||
|
//for(int index = 0; index < parcSysComs.Length; index++)
|
|||
|
//{
|
|||
|
// parcSysComs[index].Stop();
|
|||
|
// parcSysComs[index].Play();
|
|||
|
//}
|
|||
|
resObj.SetActive(false);
|
|||
|
resObj.SetActive(true);
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|