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> /// 魔炮持续时间 /// </summary> public void UpdateState2() { // 每10帧一个动画 if (_time % 10 == 0) { MovementObjectData data = new MovementObjectData(); data.tf = _movementObjectTfList[_nextMovementIndex]; data.tf.localPosition = new Vector3(0, -336, -2); data.state = 1; data.time = 0; data.duration = 12; _movementDataList.Add(data); _movementCount++; // 计算下一个需要取的下标 _nextMovementIndex = (_nextMovementIndex + 1) % MovementObjectCount; } UpdateSparkWaves(); // 更新物体碰撞器的位置 _colliderRect.SetPosition(Global.PlayerPos.x + _posOffset.x, Global.PlayerPos.y + _posOffset.y); if (_time >= _duration) { // 黑底Sprite消失 _effect.DoFade(20); _curState = 3; _time = 0; _duration = 30; _colliderRect.ClearSelf(); } _time++; }
/// <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); }