Files
JJBB/Assets/Project/Script/Player/Impact/GlobalEffect/GlobalEffectMgr.cs

152 lines
5.7 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
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
}