当前位置: 首页 > ops >正文

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

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

http://www.xdnf.cn/news/16971.html

相关文章:

  • 【Linux指南】软件安装全解析:从源码到包管理器的进阶之路
  • AI鉴伪技术鉴赏:“看不见”的伪造痕迹如何被AI识破
  • Java项目:基于SSM框架实现的电子病历管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
  • Git如何同步本地与远程仓库并解决冲突
  • 【iOS】渲染原理离屏渲染
  • 打造个人数字图书馆:LeaNote+cpolar如何成为你的私有化知识中枢?
  • 时序数据库如何高效处理海量数据
  • Spring P1 | 创建你的第一个Spring MVC项目(IDEA图文详解版,社区版专业版都有~)
  • 【数据库】使用Sql Server创建索引优化查询速度,一般2万多数据后,通过非索引时间字段排序查询出现超时情况
  • Anthropic 禁止 OpenAI 访问 Claude API:商业竞争与行业规范的冲突
  • 接口重试方案,使用网络工具的内置重试机制,并发框架异步重试,Spring Retry,消息队列重试,Feign调用重试,监控与报警,避坑指南
  • Linux 系统启动原理
  • mac 技巧
  • Postman 四种请求体格式全解析:区别、用法及 Spring Boot 接收指南
  • 手搓TCP服务器实现基础IO
  • 华为2288H V5服务器闪红灯 无法开机案例
  • 8.4IO进程线程——进程
  • 1.2 医学影像处理基本概念
  • 【OpenAI API】API接口介绍
  • Mac桌面仿制项目--让ai一句话生成的
  • ROS2机器人编程新书推荐-2025-精通ROS 2机器人编程:使用ROS 2进行复杂机器人的设计、构建、仿真与原型开发(第四版)
  • kraft的设计与实现
  • Matlab 高斯牛顿法拟合曲线
  • 机器学习——决策树(DecisionTree)
  • Flutter Dart类的使用
  • Petalinux 23.2 构建过程中常见下载错误及解决方法总结
  • k8s+isulad 国产化技术栈云原生技术栈搭建3-master节点安装
  • 音视频学习(四十九):音频有损压缩
  • TVS二极管数据手册解读
  • Android系统模块编译调试与Ninja使用指南