当前位置: 首页 > 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.lryc.cn/news/609927.html

相关文章:

  • 多源异构信号同步采集与赛道数据融合技术解析
  • 迅为RK3568开发板OpeHarmony学习开发手册-修改调试串口波特率
  • codeBuddy IDE 使用教程
  • 零售行业线上线下融合趋势,华为云智能零售解决方案,在门店运营与电商业务中的技术应用与场景实践
  • Qt 自动无法加载数据库为空
  • SP20D120CTR碳化硅二极管详解:高性能与广泛应用
  • 最小二乘法MSE
  • 嵌入式开发学习———Linux环境下IO进程线程学习(三)
  • AtCoder Beginner Contest 416 C 题
  • 同质无向加权图:理论基础、算法演进与应用前沿
  • 张宇高数基础30讲与1000题学习笔记(第4-6章)
  • Node.js高并发接口下的事件循环卡顿问题与异步解耦优化方案
  • Lego-Loam TransformToStartIMU TransformToStart TransformToEnd的区别
  • 时序数据库如何高效处理海量数据
  • Node.js(四)之数据库与身份认证
  • Python 数据科学与可视化工具箱 - 数组形状操作:reshape(), flatten()
  • SpringBoot3.0+Vue3.0开源版考试系统
  • 高防服务器租用的作用都有哪些?
  • 【慕伏白】Android Studio 配置国内镜像源
  • 机器学习——基本算法
  • 理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
  • 北斗变形监测技术在基础设施安全中的应用
  • Android JUnit 测试框架详解:从基础到高级实践
  • 2.1 DICOM标准结构与组成
  • Swin-Transformer从浅入深详解
  • 【0基础PS】PS工具详解--钢笔工具
  • 【高等数学】第八章 向量代数与空间解析几何——第一节 向量及其线性运算
  • 三轴云台之增稳技术篇
  • VGMP(VRRP Group Management Protocol)VRRP组管理协议
  • 权限管理命令