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

学习游戏制作记录(角色属性和状态脚本)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.dtcms.com/a/314098.html

相关文章:

  • python:机器学习中的分类与回归怎么理解
  • 【PHP】获取图片的主要颜色值RGB值
  • 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出回归预测+SHAP可解释分析
  • 短剧小程序系统开发:引领影视消费新潮流
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的直播营销销量转化机制研究
  • jenkins+gitlab自动发布系统
  • git 项目拉取 SSH密钥配置
  • Vue2实现docx,xlsx,pptx预览
  • 接口请求的后台发起确认
  • PPT自动化 python-pptx - 11 : 备注页 (Notes Slides)
  • Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享优化中的应用(381)
  • 【iOS】渲染原理离屏渲染
  • 如何在没有iCloud的情况下将联系人转移到新iPhone?
  • 华奥系科技奥采01:重新定义物联网数据采集标准
  • 【机器学习】(算法优化一)集成学习之:装袋算法(Bagging):装袋决策树、随机森林、极端随机树
  • 时序数据库如何高效处理海量数据
  • 代码详细注释:(linux)TCP客户端接收服务器端发的信息
  • SAP-ABAP:SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践
  • React配置proxy跨域
  • 【异常案例分析】使用空指针调用函数(非虚函数)时,没有崩溃在函数调用处,而是崩在被调用函数内部
  • 用Streamlit、Pandas与Plotly打造交互式数据可视化仪表盘:从零到一的实战教程
  • 【unitrix】 7.2 二进制位减法(bit_sub.rs)
  • 认识爬虫 —— xpath提取
  • ML307模组 OpenCPU 软件调试
  • Oracle 定时任务相关
  • 计算机网络:有路由器参与的子网间通信原理
  • [spring-cloud: NamedContextFactory ClientFactoryObjectProvider]-源码阅读
  • SparkSQL—sequence 函数用法详解
  • 无人机路径规划技术要点与难点分析
  • 权限管理命令