Unity类噩梦城 学习笔记60

Part60:Character stats(P89-91)

1:效果和操作

操作:用Stats脚本来负责启动,负责承受伤害数据等效果数据统计
效果:设置血量和攻击力,在遇到攻击时(player/enemy)会根据DoDamage()将计算之后的数据作为攻击力和modifiers伤害加成传递给TakeDamage()进行掉血处理

2:代码改变

//新增脚本Stats(用来对血量,伤害值等运算,如添加buff伤害等)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]

public class Stats
{
    [SerializeField] private int baseValue;

    public List<int> modifiers;//用来存技能buff伤害加成
    public int GetValue()//获取伤害值(若有其他加成则修)
    {
        int finalValue = baseValue;

        foreach (int modifier in modifiers)
        {
            finalValue += modifier;
        }

        return finalValue;//采用函数返回值的方式提供数据
    }

    public void AddModifier(int _modifier)
    {
        modifiers.Add(_modifier);
    }

    public void RemoveModifier(int _modifier)
    {
        modifiers.RemoveAt(_modifier);
    }
}
//新增脚本CharacterStats(用于保存角色的血量,状态以及其状态改变方法)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterStats : MonoBehaviour
{
    public Stats strength;//攻击强度
    public Stats damage;//伤害
    public Stats maxHealth;//最大生命值

    [SerializeField] private int currentHealth;//目前生命值


    protected virtual void Start()
    {
        currentHealth = maxHealth.GetValue();
    }

    public virtual void DoDamage(CharacterStats _targetStats)//括号属性为受到伤害的目标状态
    {
        int totleDamage = damage.GetValue() + strength.GetValue();//计算基础攻击+额外攻击
        Debug.Log(totleDamage);

        _targetStats.TakeDamage(totleDamage);//目标状态扣去总伤害造成的血量减少数
    }
    protected virtual void TakeDamage(int _damage)//血量减少
    {
        currentHealth -= _damage;

        Debug.Log(_damage);

        if (currentHealth < 0)
            Die();

    }

    protected virtual void Die()//死亡,后续绑定死亡动画和销毁等操作
    {

    }
}
//PlayerAnimationTrigger脚本改变(EnemyAnimationTrigger变化基本相同)
 private void AttackTrigger()
    {
        foreach (var hit in colliders)
        {
            if (hit.GetComponent<Enemy>() != null)
            {
                EnemyStat _target = hit.GetComponent<EnemyStat>();
                player.stats.DoDamage(_target);
            }
        }
    }
//新增脚本EnemyStats
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class EnemyStat : CharacterStats
{
    private Enemy enemy;
    public override void DoDamage(CharacterStats _targetStats)
    {
        base.DoDamage(_targetStats);
    }
 
    protected override void Die()
    {
        base.Die();
    }
 
    protected override void Start()
    {
        enemy = GetComponent<Enemy>();
        base.Start();
    }
 
    protected override void TakeDamage(int _damage)
    {
        base.TakeDamage(_damage);
        enemy.DamageEffect();
    }
}
//新增脚本PlayerStats
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerStat : CharacterStats
{
    private Player player;
    public override void DoDamage(CharacterStats _targetStats)
    {
        base.DoDamage(_targetStats);
 
    }
 
    protected override void Die()
    {
        base.Die();
    }
 
    protected override void Start()
    {
        player = GetComponent<Player>();
        base.Start();
    }
 
    protected override void TakeDamage(int _damage)
    {
        base.TakeDamage(_damage);
        player.DamageEffect();
    }

3:效果图

(分别表示,攻击强度:基础值+加成 伤害:基础值+加成 最大(初始)生命值:基础值 当前血量)

在这里插入图片描述

(假设设定敌人强度的Base Value为10 Damage的Base Value为5 最大生命值为100 则进行一次攻击后结果如下)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值