2026-04-20 13:49:36 +08:00
|
|
|
using System;
|
|
|
|
|
using FairyGUI;
|
|
|
|
|
using Spine.Unity;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using BingoBrain.Core;
|
|
|
|
|
using BingoBrain.Asset;
|
|
|
|
|
using UnityEngine.Events;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using Object = UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
namespace BingoBrain
|
|
|
|
|
{
|
|
|
|
|
public class FX : BaseUnity<FX>
|
|
|
|
|
{
|
|
|
|
|
private string fxPath = "Effect/sys/";
|
|
|
|
|
|
|
|
|
|
EffectPool<Fx_Type> _effectObjMonoObjPool;
|
|
|
|
|
|
|
|
|
|
private Transform goWrapperPar;
|
|
|
|
|
|
|
|
|
|
public override void Init()
|
|
|
|
|
{
|
|
|
|
|
base.Init();
|
|
|
|
|
GameObject obj = new GameObject("FX_Pool");
|
|
|
|
|
obj.transform.parent = transform;
|
|
|
|
|
obj.transform.localPosition = Vector3.zero;
|
|
|
|
|
obj.transform.localEulerAngles = Vector3.zero;
|
|
|
|
|
_effectObjMonoObjPool = new EffectPool<Fx_Type>(obj.transform);
|
|
|
|
|
_effectObjMonoObjPool.NewObjFunc = NewObjFunc;
|
|
|
|
|
_effectObjMonoObjPool.GetObjFunc = GetObjFunc;
|
|
|
|
|
_effectObjMonoObjPool.RecObjFunc = RecObjFunc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RecObjFunc(Fx_Type arg1, Object arg2)
|
|
|
|
|
{
|
|
|
|
|
var component = arg2 as Component;
|
|
|
|
|
if (component)
|
|
|
|
|
{
|
|
|
|
|
component.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
(arg2 as GameObject)?.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void GetObjFunc(Fx_Type arg1, Object arg2)
|
|
|
|
|
{
|
|
|
|
|
var component = arg2 as Component;
|
|
|
|
|
if (component)
|
|
|
|
|
{
|
|
|
|
|
component.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
(arg2 as GameObject)?.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void NewObjFunc(Fx_Type arg, UnityAction<Object> action)
|
|
|
|
|
{
|
|
|
|
|
if ((int)arg < 100)
|
|
|
|
|
{
|
|
|
|
|
BetKit.Instance.LoadGameObjectAndClone($"Effect.spine.{arg}", arg.ToString(), (go) =>
|
|
|
|
|
{
|
|
|
|
|
var sk = go.GetComponent<SkeletonAnimation>();
|
|
|
|
|
if (sk == null)
|
|
|
|
|
{
|
|
|
|
|
sk = go.GetComponentInChildren<SkeletonAnimation>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
action?.Invoke(sk);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fxPath = $"Effect.sys.{arg}";
|
|
|
|
|
BetKit.Instance.LoadGameObjectAndClone(fxPath, arg.ToString(), (go) =>
|
|
|
|
|
{
|
|
|
|
|
ParticleSystem particleSystem = go.GetComponent<ParticleSystem>();
|
|
|
|
|
if (particleSystem == null)
|
|
|
|
|
{
|
|
|
|
|
particleSystem = go.GetComponentInChildren<ParticleSystem>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (particleSystem != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in particleSystem.GetComponentsInChildren<ParticleSystem>())
|
|
|
|
|
{
|
|
|
|
|
var main = item.main;
|
|
|
|
|
main.scalingMode = ParticleSystemScalingMode.Hierarchy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
particleSystem.transform.localScale = Vector3.one * 100;
|
|
|
|
|
action?.Invoke(particleSystem);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
action?.Invoke(go);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void GetFx<T>(Fx_Type fx_Type, UnityAction<T> action) where T : Object
|
|
|
|
|
{
|
|
|
|
|
_effectObjMonoObjPool.GetObject<T>(fx_Type, (obj) =>
|
|
|
|
|
{
|
|
|
|
|
var ani = obj as SkeletonAnimation;
|
|
|
|
|
if (ani != null)
|
|
|
|
|
{
|
|
|
|
|
ani.gameObject.layer = 0;
|
|
|
|
|
ani.ClearState();
|
|
|
|
|
ani.transform.localPosition = Vector3.zero;
|
|
|
|
|
ani.transform.localEulerAngles = Vector3.zero;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
action?.Invoke(obj);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RecFx<T>(Fx_Type fx_Type, T obj) where T : Object
|
|
|
|
|
{
|
|
|
|
|
_effectObjMonoObjPool.RecObject(fx_Type, obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<GameObject> gameObjects = new List<GameObject>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override void Dispose()
|
|
|
|
|
{
|
|
|
|
|
base.Dispose();
|
|
|
|
|
_effectObjMonoObjPool.Dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetFx<T>(GGraph gp, Fx_Type fx_Type, UnityAction<T> action, Action Rec = null) where T : Component
|
|
|
|
|
{
|
|
|
|
|
GetFx<T>(fx_Type, (fx) =>
|
|
|
|
|
{
|
|
|
|
|
if (fx != null)
|
|
|
|
|
{
|
|
|
|
|
var goWrapper = new GoWrapper(fx.gameObject);
|
|
|
|
|
gp.SetNativeObject(goWrapper);
|
|
|
|
|
fx.transform.localPosition = Vector3.zero;
|
|
|
|
|
fx.transform.localScale = Vector3.one * 100;
|
|
|
|
|
fx.transform.localEulerAngles = Vector3.zero;
|
|
|
|
|
action?.Invoke(fx);
|
|
|
|
|
Rec += () =>
|
|
|
|
|
{
|
|
|
|
|
goWrapper.wrapTarget = null;
|
|
|
|
|
gp.SetNativeObject(null);
|
|
|
|
|
RecFx(fx_Type, fx);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal T SetFx<T>(GGraph gp, Fx_Type fx_main_ad, Action closeCallback)
|
|
|
|
|
{
|
|
|
|
|
throw new NotImplementedException();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum Fx_Type
|
|
|
|
|
{
|
|
|
|
|
None = -1,
|
|
|
|
|
|
|
|
|
|
#region 骨骼动画
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 胜利结算飘带
|
|
|
|
|
/// </summary>
|
|
|
|
|
spine_reward = 0,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 引导手
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_hand_pre,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// binggo
|
|
|
|
|
/// </summary>
|
|
|
|
|
spine_bingo,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 主界面卡板
|
|
|
|
|
/// </summary>
|
|
|
|
|
spine_choice_card,
|
|
|
|
|
spine_choice_card_b,
|
|
|
|
|
spine_starreward,
|
|
|
|
|
spine_starreward_bg,
|
|
|
|
|
fx_first_reward,
|
|
|
|
|
fx_main_ad,
|
|
|
|
|
fx_broad,
|
|
|
|
|
fx_tips,
|
2026-05-08 11:03:00 +08:00
|
|
|
fx_three_gift,
|
2026-04-20 13:49:36 +08:00
|
|
|
fx_title_effect,
|
2026-05-08 11:03:00 +08:00
|
|
|
fx_wheel,
|
|
|
|
|
fx_saving,
|
2026-04-20 13:49:36 +08:00
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 粒子
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 货币资源入账
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_ui_jinbi_click = 107,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 转盘进入特效
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_zhuangpan_enter,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 签到头部背景
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_tanchuang_glow,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 签到Icon
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_icon_glow,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 叫号出现的特效
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_ball_enter,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 选择转盘展示特效
|
|
|
|
|
/// </summary>
|
|
|
|
|
fx_zhuanpan_Select,
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|