学习游戏制作记录(角色属性和状态脚本)8.4

发布于:2025-08-05 ⋅ 阅读:(23) ⋅ 点赞:(0)

1.实现简单的角色属性

创建CharactorState脚本:

挂载在敌人和玩家身上

    public float damage;//角色伤害
    public float maxHp;//最大生命

    [SerializeField] private float currentHealth;//当前生命

    void Start()
    {
        currentHealth = maxHp;//初始化将当前生命设置为最大生命
    }

    public void TakeDamage(float _damage)//受到伤害调用
    {
        currentHealth -= _damage;

        if (currentHealth < 0)
        {
            Die();
        }
    }

    private void Die()//暂不给出具体的实现
    {
        throw new NotImplementedException();
    }

Entity脚本:

public CharactorState state { get; private set; }//获取属性脚本

 state = GetComponent<CharactorState>();

PlayerAnimationTriggers 脚本:
 

    private void AttackTrigger()
    {
        Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);

        foreach(var hit in collider2Ds)
        {
            if(hit.GetComponent<Enemy>()!=null)
            {
                hit.GetComponent<Enemy>().Damage();
                hit.GetComponent<Enemy>().state.TakeDamage(player.state.damage);//调用伤害函数
            }
        }
    }

2.实现简单的角色状态脚本

在游戏里,玩家可能会装备装备,这些状态会影响玩家的属性,我们不妨创建一个State脚本来统一修改这些属性:

[System.Serializable]
public class State 
{
    [SerializeField] private int baseValue;//每个状态的基础属性

    public  List<int> modifiers;//每个状态对应的修改器,即修改基础属性的数值


    public int  GetValue()//其它脚本获取属性
    {
        int finalValue = baseValue;

        foreach (int modifier in modifiers)//依次应用修改器
        {
            finalValue += modifier;
        }

        return finalValue;
    }


    public void AddModify(int _modifier)//添加修改器
    {
        modifiers.Add( _modifier );
    }

    public void RemoveModify(int _modifier)//移除修改器
    {
        modifiers.RemoveAt( _modifier );
    }
}

CharactorState脚本:

public State damage;//将伤害和最大生命都修改为状态,它们会因为各种因素而修改自己的基础值
public State maxHealth;

[SerializeField] private float currentHealth;

void Start()
{
    currentHealth = maxHealth.GetValue();

    damage.AddModify(4);//调试用,成功调用则在原有攻击数值上加上4
}

PlayerAnimationTriggers 脚本:

    private void AttackTrigger()
    {
        Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);

        foreach(var hit in collider2Ds)
        {
            if(hit.GetComponent<Enemy>()!=null)
            {
                hit.GetComponent<Enemy>().Damage();
                hit.GetComponent<Enemy>().state.TakeDamage(player.state.damage.GetValue());

                Debug.Log(player.state.damage.GetValue());//检测用
            }
        }
    }

设定基础攻击为7,加上4后输出11


网站公告

今日签到

点亮在社区的每一天
去签到