根据不同类型的攻击计算伤害
public int CalculateDamage(int type ,float ratio) { int damage=0; if (type == 1) damage = (int)(150 * ratio); else if (type == 2)//表示大锤 damage = (int)(100 * ratio); else if (type / 100 == 3) //子弹发射的攻击力要根据不同子弹类型进行区分 { if (type == 301) damage = (int)(200 * ratio); else if (type == 302) damage = (int)(100 * ratio); else if (type == 303) damage = (int)(100 * ratio); } else if (type == 4) { } // KPlayer.I.HitLife((int)(500 * ratio)); else if (type == 5) //表示匕首攻击力 { damage = (int)(50 * ratio); } return damage;// }
public void FixedUpdate() { // Debug.Log("skillManager FixedUpdate() 本机id ------:" + KPlayer.I.playerInfo.id ); if (Time.time > nextAutoSortTime) { // Debug.Log ("进行排名"); KPlayerManager.I. PlayerSort();//玩家排序 nextAutoSortTime = Time.time + 2f; } // Debug.Log ("-----------------------head:" + KPlayer.I.headDis); // 让所有的人物进行转头 /* 要执行所有人的扭头变化,自己和除自己 */ if (KSkillManager.I.forwordAttack == true) return; foreach (KPlayer player in KPlayerManager.I.allPlayers) { if (!player) Debug.Log ("为空啊"); LookAtTarget(player.targetPlayerID,player.playerInfo.id );//目标人物和本人id } /* 跟随变化的所有可能性: 1.现在无跟随对象的情况下: 1.原来没有跟随对象,直接return 2.原来有跟随对象,发送重置身体的请求 2.现在找到跟随对象: 1.原来无跟随对象,发送跟随请求 2.原来有跟随对象 1.原来的跟随对象与现在的一致 ,不发请求 2.不一致,发送跟随请求 */ if (KPlayerManager.I.GetNearestEnemy(KPlayer.I.playerInfo.id)==0)//无跟随对象 if(!LookAtPlayer ){ return ;} //没有找到敌人要返回 //此处需要赋值-11么??? else //说明原来有跟随,现在没有 {KSocketManager.I.sendLookAt (-11, 2); LookAtPlayer=null; ///////////////////////////////////////////////////////////////////////////////////////////////////////************************************************** return;}//-111表示没有跟随对象//发送不转头的消息 //以下为找到跟随对象 KPlayer temp=KPlayerManager.I.FindPlayer (KPlayerManager.I.GetNearestEnemy (KPlayer.I.playerInfo.id)); /* if (temp == null) { Debug.Log ("现在没有找到最近敌人"); } else Debug.Log ("找到最近敌人: id:"+temp.playerInfo.id); */ float angle =checkTargetDirForMe(temp.trans,KPlayer.I.trans);//求角度 bool morethan90=false; float angleHead = 0; if (KPlayer.I.isRifle ||KPlayer.I.isMace) //枪状态或者大锤状态, { //如果在枪的状态下 ,角度减少90度,就可以。 并且要添加一个标识,是左边攻击,还是右边攻击 if (angle > 90) {//这个判断必须添加,但是来复枪的攻击方式可以在攻击的时候传递就可以,根本不用在这里添加区别 angle -= 90; KPlayer.I.RifleAttackType = 3; } else if (angle < -90) { KPlayer.I.RifleAttackType = 2; angle += 90; } else KPlayer.I.RifleAttackType = 1; } else// { if (angle > 90) { morethan90 = true; //angle -= 90; angleHead = angle - 90; angle = 90; } else if (angle < -90) { morethan90 = true; angleHead = angle+90; // angle=-90; } else angleHead = 0.5f; } angle = 0.5f + angle / 90f * 0.5f;// angleHead=0.5f + angleHead / 90f * 0.5f;// float dis = Vector3.Distance (KPlayer.I.trans.position, temp.trans.position);//求距离 if (!LookAtPlayer || LookAtPlayer != temp) {//原来无跟随请求2.1 ,或者 原来有跟随请求但跟随对象不一致 2.2.2 // Debug.Log ("不一致!!!!"); LookAtPlayer = temp; if (dis <KPlayer.I.waistDis){//扭腰 //Debug.Log ("发送扭腰对象"); KSocketManager.I.sendLookAt (LookAtPlayer.playerInfo.id, 2); //if (morethan90) { KPlayer.I.playerModel.setHeadRoat (angleHead); //} KPlayer.I.playerModel.setWaistRoat (angle); Debug.Log ("anglehead angle:"+angleHead +" "+angle); } else if (dis < KPlayer.I. headDis) {//扭头 KSocketManager.I.sendLookAt (LookAtPlayer.playerInfo.id ,1); //Debug.Log ("发送牛头对象"); KPlayer.I.playerModel.setHeadRoat (angle); KPlayer.I.playerModel.setWaistRoat (0.5f); } else {//改为朝前 //没有朝前的目标 //Debug.Log KSocketManager.I.sendLookAt (LookAtPlayer.playerInfo.id ,1); //这句话之后要修改掉 KPlayer.I.playerModel.setHeadRoat (0.5f); KPlayer.I.playerModel.setWaistRoat (0.5f); } } else {//现在有跟随对象,但是原来也有跟随对象,只是跟随对象一致,不需要发送请求。 2.2.1 //可以用方法分离出来。 // Debug.Log("一致"); if (dis <KPlayer.I. waistDis) {//扭腰 // Debug.Log("扭腰: angle : "+angle); KPlayer.I.playerModel.setHeadRoat (angleHead); KPlayer.I.playerModel.setWaistRoat (angle); } else if (dis < KPlayer.I. headDis) {//扭头 KPlayer.I.playerModel.setHeadRoat (angle); KPlayer.I.playerModel.setWaistRoat (0.5f); } else {//改为朝前 //没有朝前的目标 KPlayer.I.playerModel.setHeadRoat (0.5f); KPlayer.I.playerModel.setWaistRoat (0.5f); } } }
public void LookAtTarget(int targetPlayerID,int OwnerPlayerID ) { // Debug.Log ("targetid + ownerid"+ targetPlayerID+" "+OwnerPlayerID); KPlayer targetPlayer = KPlayerManager.I.FindPlayer (targetPlayerID); KPlayer OwnerPlayer = KPlayerManager.I.FindPlayer (OwnerPlayerID); if (targetPlayerID == -11) { OwnerPlayer.playerModel.setHeadRoat(0.5f); OwnerPlayer.playerModel.setWaistRoat(0.5f); return; } OwnerPlayer.targetPlayerID = targetPlayerID; float angle =checkTargetDirForMe( targetPlayer.trans, OwnerPlayer.trans);//目标角色以及本机角色 bool morethan90=false; float angleHead = 0; if (OwnerPlayer.isRifle||OwnerPlayer.isMace) { //如果在枪的状态下 ,角度减少90度,就可以。 并且要添加一个标识,是左边攻击,还是右边攻击 if (angle > 90) {//这个判断必须添加,但是来复枪的攻击方式可以在攻击的时候传递就可以,根本不用在这里添加区别 angle -= 90; OwnerPlayer.RifleAttackType = 3; } else if (angle < -90) { OwnerPlayer.RifleAttackType = 2; angle += 90; } else OwnerPlayer.RifleAttackType = 1; } else { if (angle > 90) { morethan90 = true; //angle -= 90; angleHead = angle - 90; angle = 90; } else if (angle < -90) { morethan90 = true; angleHead = angle+90; // angle=-90; } else angleHead = 0; } angle = 0.5f + angle / 90f * 0.5f;// angleHead=0.5f + angleHead / 90f * 0.5f;// float dis =Vector3.Distance(OwnerPlayer.trans.position, targetPlayer.trans.position); if (dis <OwnerPlayer. waistDis) {//扭腰 OwnerPlayer.playerModel.setHeadRoat(angleHead); OwnerPlayer.playerModel.setWaistRoat(angle); } else if (dis < OwnerPlayer.headDis) {//扭头 OwnerPlayer.playerModel.setHeadRoat(angle); OwnerPlayer.playerModel.setWaistRoat(0.5f); } else {//改为朝前 //没有朝前的目标 OwnerPlayer.playerModel.setHeadRoat(0.5f); OwnerPlayer.playerModel.setWaistRoat(0.5f); } }