private void Explode() { STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; effect.SetSprite("STGEffectAtlas", "TransparentCircle", eBlendMode.SoftAdditive, LayerId.STGNormalEffect, true); effect.SetExistDuration(30); effect.SetPosition(_curPos); effect.SetSize(128, 128); effect.ChangeWidthTo(192, 30, InterpolationMode.Linear); effect.ChangeHeightTo(192, 30, InterpolationMode.Linear); effect.DoFade(30); SoundManager.GetInstance().Play("se_explode", 0.1f); float angle = Random.Range(0f, 360f); List <Color> colorList = new List <Color> { new Color(1, 0, 0), new Color(0, 1, 0), new Color(0, 0, 1) }; for (int i = 0; i < 12; i++) { effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; effect.SetSprite("STGReimuAtlas", "ReimuAHSCEffect", eBlendMode.SoftAdditive, LayerId.STGNormalEffect, true); effect.SetExistDuration(30); effect.SetPosition(_curPos); effect.DoStraightMove(Random.Range(4f, 6f), i * 30 + angle); int colorIndex = Random.Range(0, 3); effect.SetSpriteColor(colorList[colorIndex].r, colorList[colorIndex].g, colorList[colorIndex].b); effect.DoFade(30); effect.SetSize(128, 128); effect.ChangeWidthTo(64, 30, InterpolationMode.Linear); effect.ChangeHeightTo(64, 30, InterpolationMode.Linear); } }
/// <summary> /// 创建自定义的STGObject /// <para>string customizedName 自定义名称</para> /// <para>posX</para> /// <para>posY</para> /// <para>args...</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int CreateCustomizedSTGObject(ILuaState luaState) { int top = luaState.GetTop(); int numArgs = top - 3; string customizedName = luaState.ToString(-top); float posX = (float)luaState.ToNumber(-top + 1); float posY = (float)luaState.ToNumber(-top + 2); int funcRef = InterpreterManager.GetInstance().GetCustomizedFuncRef(customizedName, eCustomizedType.STGObject, eCustomizedFuncRefType.Init); luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef); STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; effect.SetPosition(posX, posY); luaState.PushLightUserData(effect); // 复制参数 int copyIndex = -numArgs - 2; for (int i = 0; i < numArgs; i++) { luaState.PushValue(copyIndex); } luaState.Call(numArgs + 1, 0); // 返回结果 luaState.PushLightUserData(effect); return(1); }
public void PlayGrazeEffect() { if (!_isGrazedDuringFrame) { _isGrazedDuringFrame = true; STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; effect.SetPrefab("GrazeEffect", LayerId.STGTopEffect, true); effect.SetPosition(_curPos); effect.SetExistDuration(36); float angle = Random.Range(0, 360); effect.DoStraightMove(0.6f, angle); SoundManager.GetInstance().Play("se_graze", 0.05f, false, true); } }
private void UpdateAppearEffect() { _appearEffect.SetPosition(_curPos.x, _curPos.y); float factor = (float)_timeSinceCreated / AppearEffectExistDuration; float scaleX = Mathf.Lerp(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeTo, factor) * _scaleX; float scaleY = Mathf.Lerp(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeTo, factor) * _scaleY; _appearEffect.SetScale(scaleX, scaleY); if (_timeSinceCreated >= AppearEffectExistDuration) { //_appearEffect.FinishEffect(); _appearEffect = null; } }
/// <summary> /// 创建生成子弹时候的特效 /// </summary> private void CreateAppearEffect() { if (_cfg.appearEffectSizeFrom == 0) { return; } _appearEffect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; _appearEffect.SetSprite(Consts.STGBulletsAtlasName, _cfg.appearEffectName, _cfg.blendMode, LayerId.EnemyBarrage, true); _appearEffect.SetOrderInLayer(10); _appearEffect.SetPosition(_curPos.x, _curPos.y); _appearEffect.SetScale(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeFrom); //_appearEffect.DoScaleWidth(_cfg.appearEffectSizeTo, AppearEffectExistDuration, InterpolationMode.Linear); //_appearEffect.DoScaleHeight(_cfg.appearEffectSizeTo, AppearEffectExistDuration, InterpolationMode.Linear); _appearEffect.DoFade(AppearEffectExistDuration); }
/// <summary> /// 创建一个精灵特效 /// <para>string effectSpName</para> /// <para>float scaleX</para> /// <para>float scaleY</para> /// <para>float posX</para> /// <para>float posY</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int CreateSpriteEffect(ILuaState luaState) { string effectSpName = luaState.ToString(-5); float scaleX = (float)luaState.ToNumber(-4); float scaleY = (float)luaState.ToNumber(-3); float posX = (float)luaState.ToNumber(-2); float posY = (float)luaState.ToNumber(-1); luaState.Pop(5); STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; effect.SetSprite(effectSpName); effect.SetScale(scaleX, scaleY); effect.SetPosition(posX, posY); luaState.PushLightUserData(effect); return(1); }
public override void Start() { _masterSparkObject = ResourceManager.GetInstance().GetPrefab("Prefab/Character/MarisaA", "MasterSpark"); UIManager.GetInstance().AddGoToLayer(_masterSparkObject, LayerId.PlayerBarage); _masterSparkTf = _masterSparkObject.transform; Vector2 playerPos = Global.PlayerPos; Vector3 pos = new Vector3(playerPos.x + _posOffset.x, playerPos.y + _posOffset.y, MasterSparkPosZ); _masterSparkTf.localPosition = pos; Transform tf; for (int i = 0; i < MovementObjectCount; i++) { tf = _masterSparkTf.Find("SparkWave" + i); _movementObjectTfList.Add(tf); } _sparkContainerTf = _masterSparkTf.Find("SparkContainer"); _movementBodyTf = _sparkContainerTf.Find("MovementBody"); // 黑底 _effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect; _effect.SetSprite("ShapeAtlas", "ShapeCircle", eBlendMode.Normal, LayerId.STGBottomEffect, false); _effect.SetSize(0, 0); _effect.SetSpriteColor(0, 0, 0, 1); _effect.ChangeWidthTo(1024, 50, InterpolationMode.EaseInQuad); _effect.ChangeHeightTo(1024, 50, InterpolationMode.EaseInQuad); _effect.SetPosition(playerPos.x, playerPos.y); // 基础属性 _curState = 1; _time = 0; _duration = 30; _isFinish = false; // 震动 ShakeEffect shakeEffect = EffectsManager.GetInstance().CreateEffectByType(EffectType.ShakeEffect) as ShakeEffect; shakeEffect.DoShake(0, 270, 3, 3f, 1.5f, 5); // 音效 SoundManager.GetInstance().Play("se_masterspark", 0.1f, false, true); }
protected void SetSpriteEffectParas(STGSpriteEffect effect, float[] paras) { if (paras.Length == 0) { return; } switch ((int)paras[0]) { // 设置位置,参数为增量 case 1: { float dx = paras[1]; float offsetX = paras[2]; float dy = paras[3]; float offsetY = paras[4]; if (offsetX != 0) { dx += Random.Range(-offsetX, offsetX); } if (offsetY != 0) { dy += Random.Range(-offsetY, offsetY); } float sin = Mathf.Sin(_curRotation * Mathf.Deg2Rad); float cos = Mathf.Cos(_curRotation * Mathf.Deg2Rad); float relX = cos * dx - sin * dy; float relY = sin * dx + cos * dy; effect.SetPosition(_hitPos.x + relX, _hitPos.y + relY); break; } // 设置位置,参数为绝对位置 case 2: { float posX = paras[1]; float offsetX = paras[2]; float posY = paras[3]; float offsetY = paras[4]; if (offsetX != 0) { posX += Random.Range(-offsetX, offsetX); } if (offsetY != 0) { posY += Random.Range(-offsetY, offsetY); } effect.SetPosition(posX, posY); break; } // 设置速度,v,dAngle,acce // 即速度,与当前速度方向的差值,加速度 // dAngle为0则表示当前速度方向 case 3: { float velocity = paras[1]; float angle = _curRotation + paras[2]; float acce = paras[3]; effect.DoStraightMove(velocity, angle); effect.DoAcceleration(acce, angle); break; } // 设置速度,v,angle,acce // 即速度,速度方向,加速度 case 4: { float velocity = paras[1]; float angle = paras[2]; float acce = paras[3]; effect.DoStraightMove(velocity, angle); effect.DoAcceleration(acce, angle); break; } // 图像旋转角度 // dRotationAngle,与当前子弹速度方向的差值 case 5: { float angle = _curRotation + paras[1]; effect.SetRotation(angle); break; } // 图像旋转角度 // angle,指定角度 case 6: { float angle = paras[1]; effect.SetRotation(angle); break; } // 旋转 // omega,角速度 case 7: { float omega = paras[1]; effect.DoRotation(omega, -1); break; } // orderInLayer case 9: { int orderInLayer = (int)paras[1]; effect.SetOrderInLayer(orderInLayer); break; } // 设置alpha case 10: { float alpha = paras[1]; effect.SetSpriteAlpha(alpha); break; } // 透明度渐变 // toAlpha,duration case 11: { float toAlpha = paras[1]; int duration = (int)paras[2]; effect.DoTweenAlpha(toAlpha, duration); break; } // 设置颜色 case 12: { float r = paras[1]; float g = paras[2]; float b = paras[3]; effect.SetSpriteColor(r, g, b); break; } // 设置带alpha的颜色 case 13: { float r = paras[1]; float g = paras[2]; float b = paras[3]; float aValue = paras[4]; effect.SetSpriteColor(r, g, b, aValue); break; } // 设置缩放 // scaleX,scaleY case 15: { float scaleX = paras[1]; float scaleY = paras[2]; effect.SetScale(scaleX, scaleY); break; } // 设置scaleX缩放动画 // toScaleX duration case 16: { float toScaleX = paras[1]; int duration = (int)paras[2]; effect.ChangeWidthTo(toScaleX, duration, InterpolationMode.Linear); break; } // 设置scaleY缩放动画 // toScaleY duration case 17: { float toScaleY = paras[1]; int duration = (int)paras[2]; effect.ChangeHeightTo(toScaleY, duration, InterpolationMode.Linear); break; } // 持续时间 case 30: { int duration = (int)paras[1]; effect.SetExistDuration(duration); break; } } }
public static bool Set(object o, TValue key, ref TValue value) { STGSpriteEffect sprite = (STGSpriteEffect)o; if (key.TtIsString()) { switch (key.SValue()) { #region 基础变量 case "x": { Vector2 pos = sprite.GetPosition(); pos.x = (float)value.NValue; sprite.SetPosition(pos); return(true); } case "y": { Vector2 pos = sprite.GetPosition(); pos.y = (float)value.NValue; sprite.SetPosition(pos); return(true); } case "rot": { sprite.SetRotation((float)value.NValue); return(true); } #endregion #region 运动相关变量 case "v": { sprite.velocity = (float)value.NValue; return(true); } case "vx": { sprite.vx = (float)value.NValue; return(true); } case "vy": { sprite.vy = (float)value.NValue; return(true); } case "vAngle": { sprite.vAngle = (float)value.NValue; return(true); } case "maxV": { sprite.maxVelocity = (float)value.NValue; return(true); } case "acce": { sprite.acce = (float)value.NValue; return(true); } case "accAngle": { sprite.accAngle = (float)value.NValue; return(true); } #endregion #region sprite专属变量 case "orderInLayer": { sprite.SetOrderInLayer((int)value.NValue); return(true); } case "alpha": { sprite.SetSpriteAlpha((float)value.NValue); return(true); } #endregion } } value.SetSValue(string.Format("SetField of userData fail!Invalid key {0} for type {1}", key, typeof(STGSpriteEffect).Name)); return(false); }