用枚举管理角色状态,避免逻辑混乱:
public enum CombatState { Idle, Attack, Hit, Dead, Cooldown }
private CombatState currentState = CombatState.Idle;
void Update() {
switch (currentState) {
case CombatState.Attack: HandleAttack(); break;
case CombatState.Hit: HandleHit(); break;
}
}
基础伤害=攻击力×(1-防御减免),加入暴击随机:
public float CalculateDamage(float atk, float def, bool isCrit) {
float baseDamage = atk * (1 - Mathf.Clamp(def / 100, 0, 0.8f));
float critMultiplier = isCrit ? Random.Range(1.8f, 2.2f) : 1f;
return baseDamage * critMultiplier;
}
受击时播放动画+屏幕震动+扣血:
IEnumerator HandleHit() {
animator.SetTrigger("Hit");
CameraShake.Instance.Shake(0.2f, 0.1f);
currentHP -= lastDamage;
yield return new WaitForSeconds(0.5f);
currentState = CombatState.Idle;
}
💡 实战Tips:技能冷却用Time.deltaTime计时,不要用Invoke,避免帧率波动导致冷却不准。
← 返回文章列表