diff --git a/Role/Bullet.cs b/Role/Bullet.cs index c66e281..17edaf5 100644 --- a/Role/Bullet.cs +++ b/Role/Bullet.cs @@ -152,7 +152,7 @@ public class Bullet : MonoBehaviour { direction = 1; } - Crole.bloodLoss(new object[] { Crole, role.DamageCreate(), attackObj.damageTyp, role }, direction); + Crole.bloodLoss(new object[] { Crole, role.DamageCreate(Crole.GetComponent()), attackObj.damageTyp, role }, direction); attackObj.bulltes.Remove(this.gameObject); if (myBulletType != BulletType.Spraying) @@ -237,7 +237,7 @@ public class Bullet : MonoBehaviour if (Time.time - lastDamageTime > 1f) // 每秒扣一次血 { - Crole.bloodLoss(new object[] { Crole, role.DamageCreate(), attackObj.damageTyp, role }); + Crole.bloodLoss(new object[] { Crole, role.DamageCreate( Crole.GetComponent()), attackObj.damageTyp, role }); Crole.FlashRedEffect(); lastDamageTime = Time.time; } diff --git a/Role/Role.cs b/Role/Role.cs index 4c8c3fb..3432de5 100644 --- a/Role/Role.cs +++ b/Role/Role.cs @@ -32,6 +32,7 @@ public enum Camp public enum CharacterFlags { + no=0<<0, fly = 1 << 0, land = 1 << 1, big = 1 << 2, @@ -52,8 +53,6 @@ public class Role : Fun [Header("名称")] public string Name; [Header("阵营")] public Camp camp ; [Header("血量")] public float hp = 100f;//血量 - //[Header("技能")] public List Myskill;//技能 - private float maxHp; [Header(("死亡动画编号"))] public int dieIndex=-1; @@ -169,13 +168,14 @@ public class Role : Fun public List buffList = new List(); - public CharacterFlags Tags = 0; + public CharacterFlags myTags = 0; public bool hasfalg(CharacterFlags flag) { - return (Tags & flag) == flag; + return (myTags & flag) == flag; } - - + + public SkillUp mySkillUp; + /// /// 储存buff /// @@ -202,10 +202,6 @@ public class Role : Fun } tag = Enum.GetName(typeof(Camp), camp); updateAnimation(); - - - - //AddBuff(storageBuff,this.CreateDecelerationBuff(10f,1f)); } @@ -328,7 +324,6 @@ public class Role : Fun if (Application.isPlaying) { animationHighlight = hitIndex; - } } @@ -340,10 +335,6 @@ public class Role : Fun { Navigation.speedFactor *= num; } - - - - /// /// 单位更新buff /// @@ -465,13 +456,6 @@ public class Role : Fun }); } - // 升级逻辑 - public virtual void Upgrade() - { - Debug.Log("父类的升级逻辑,空的,请在子类重写"); - } - - public void SetSelfInfo() { @@ -502,20 +486,49 @@ public class Role : Fun } - public float DamageCreate()//伤害生成 + /// + /// 计算伤害 + /// + /// 造成者 + /// 目标 + /// + public float DamageCreate(Role Target)//伤害生成 { // 生成普通伤害 - float num = UnityEngine.Random.Range(MinAttack, MaxAttack); + float hurt = UnityEngine.Random.Range(MinAttack, MaxAttack); // 判断是否暴击 float critChance = UnityEngine.Random.Range(0f, 1f); // 生成一个0到1之间的随机数 - if (critChance < CritRate) // 如果暴击发生 + + + if (critChance < CritRate*(1+mySkillUp.CriticalRate)) // 如果暴击发生 { // 计算暴击伤害(普通伤害乘以暴击加成) - num *= (1 + CriticalHitRateBonus); + hurt *= (1 + CriticalHitRateBonus*(1+ mySkillUp.CriticalDamage)); //Debug.Log("暴击发生!伤害增加:" + num); } - return num; + if (Target.hasfalg(CharacterFlags.big)) // 如果是大型敌人 + { + hurt*=(1+mySkillUp.DamageOfBig); + } + + if (Target.hasfalg(CharacterFlags.min)) // 如果是大型敌人 + { + hurt *= (1 + mySkillUp.DamageOfMin); + } + + if (Target.hasfalg(CharacterFlags.fly)) // 如果是飞行敌人 + { + hurt *= (1 + mySkillUp.DamageOfSky); + } + + if (Target.hasfalg(CharacterFlags.land)) // 如果是地面敌人 + { + hurt *= (1 + mySkillUp.DamageOfland); + } + + + return hurt; } public virtual void SlowDown(float slowFactor, float duration)