public override void Effect(BattlePokemonData pokemon) { DebugHelper.LogFormat("你选择使用了{0}", BagItemName); ChangeCatachCorrection(pokemon); //精灵球和精灵球特效 GameObject pokemonBallInPool = PokemonFactory.GetPokemonBall(); pokemonBallInPool.transform.position = pokemon.transform.position + Vector3.up * 3; PokemonFactory.PokemonBallEffect(pokemon.transform.position); //精灵捕捉率计算 int shadeNum = 0; bool issuccess = false; CatchPokemon.CatchPokemonResult( pokemon, this.CatachCorrection, 1 , out shadeNum, out issuccess); DebugHelper.Log( new StringBuilder(40) .AppendFormat("正在捕捉精灵{0},{1}振动了", pokemon.Ename, BagItemName) .Append(shadeNum) .AppendFormat("次,最后捕捉{0}了", issuccess ? "成功" : "失败") .ToString()); pokemon.transform.GetComponent <Rigidbody>().useGravity = false; //精灵变小 pokemon.transform .DOScale(0.01f, 0.5f) .OnComplete( () => { Sequence mySequence = DOTween.Sequence(); //精灵球振动 for (int i = 0; i < shadeNum; ++i) { mySequence.Append(pokemonBallInPool.transform.DOShakePosition(0.3f, new Vector3(-0.03f, 0.03f, 0.03f), 30)); mySequence.AppendInterval(0.2f); } mySequence.AppendCallback(() => { if (issuccess) { //捕捉精灵 LHCoroutine.CoroutineManager.DoCoroutine(CatachPokeomon(pokemon.pokemon)); //通知结束对战 NotificationCenter <int> .Get().DispatchEvent("CatchPokemon", 1); //显示捕捉结果UI NotificationCenter <Pokemon> .Get().DispatchEvent("CatchPokemonResult", pokemon.pokemon); NotificationCenter <bool> .Get().DispatchEvent("BattlePause", false); } else { pokemon.transform.DOScale(1, 0.5f). OnComplete(() => { pokemon.transform.GetComponent <Rigidbody>().useGravity = true; PokemonFactory.StorePokemonBallInPool(pokemonBallInPool); NotificationCenter <bool> .Get().DispatchEvent("BattlePause", false); }); } }); } ); }