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); } }
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); } }
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; } } }