private void extraDamageEffect(PlayerBasic playerAim) //额外添加挂在的计算脚本 { if (thePlayer.theAttackLinkNow != null && string.IsNullOrEmpty(thePlayer.theAttackLinkNow.conNameToEMY) == false) //效果不可叠加 { System.Type theType = System.Type.GetType(thePlayer.theAttackLinkNow.conNameToEMY); if (!playerAim.gameObject.GetComponent(theType)) { try { playerAim.gameObject.AddComponent(theType); //print("makeEffect3"); } catch { //无法添加这个效果 //那么就转换成伤害,造成2点真实伤害 thePlayer.OnAttack(playerAim, 2, true); //print ("canNotAddEMY"); } } else { effectBasic theEffect = playerAim.gameObject.GetComponent(theType) as effectBasic; theEffect.updateEffect(); //print ("update"); } thePlayer.theAttackLinkNow.conNameToEMY = ""; } }
//真正的攻击方法 private void Attack(float makeDamage) { if (!thePlayer || makeDamage < 0) { return; } //如果makeDamage是负数,就说明制作获得效果,但是不攻击 float theDistanceCheck = thePlayer.theAttackAreaLength; theDistanceCheck += makeDamage; theEMY = systemValues.searchAIMs(thePlayer.theAttackAreaAngel, theDistanceCheck, thePlayer.transform); List <PlayerBasic> toUSePlayerBasic = check(); //print ("theEMY.count " + theEMY.Count); for (int i = 0; i < toUSePlayerBasic.Count; i++) { theDistance = Vector3.Distance(thePlayer.transform.position, toUSePlayerBasic [i].transform.position); //print (theDistanceCheck); if (theDistance <= theDistanceCheck && makeDamage >= 0) { //有些时候仅仅是增加脚本,例如“斗气爆发”不具备攻击效果 thePlayer.OnAttack(toUSePlayerBasic [i], 0, false); //造成直接的伤害 extraDamageEffect(toUSePlayerBasic [i]); //添加额外的计算脚本,每个脚本的效果由脚本自己决定 //print(theEMY[i].name+" is being attacked"); //记录连击 if (thePlayer == systemValues.thePlayer) { systemValues.addHitCount(1); } } } }