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

(M)unity受伤反弹以及死亡动画

受伤反弹

1.在人物控制脚本中添加受伤后速度将为0,并添加一个反弹的力
在刷新移动时,需要在没有受伤的状态

public bool isHurt;
public float hurtForce;
private void FixedUpdate()
{if(!isHurt)Move();
}public void GetHurt(Transform attacker)
{isHurt = true;rb.velocity = Vector2.zero;//取自己的方向,应该无关乎数值大小,所以在完成方向的计算后应该规范化为1(normalize、)Vector2 dir = new Vector2((transform.position.x - attacker.position.x), 0).normalized;//添加反弹的力rb.AddForce(dir * hurtForce, ForceMode2D.Impulse);
}

2.添加到受伤事件列表中

在这里插入图片描述

3.由于是通过代码对物体改变状态,添加到受伤事件中的,受伤后ishurt布尔值一直为true,在运行时会有人物持续反弹的效果

更改数值为false方法

①在受伤动画控制器中添加一个脚本,通过在该代码中引入角色脚本改变数值,完成受伤动画播放结束后,受伤布尔值也改变成false
在这里插入图片描述

②双击进入脚本后,更改模板完成数值更改

通过animator.GetComponent获取动画挂载人物身上挂载的组件

override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{animator.GetComponent<PlayerController>().isHurt = false;
}

死亡事件动画

添加死亡动画,任何情况都可以完成转换,添加死亡布尔值为参数,true进入动画状态,false退出游戏

在这里插入图片描述

1.由于动画播放默认loop,在设置在anystate状态下级后,只要血量为0,就会反复执行动画
故,将死亡动画转化为单次播放

在这里插入图片描述

2.此外,除去在死亡后执行动画,事件中还应包含对输入系统的禁止

①人物角色脚本:
设置事件

using UnityEngine.Events;
public UnityEvent onDie;
public void TakeDamage(Attack attacker)
{//如果无敌,则直接返回if (invulnerable){return;}//Debug.Log(attacker.damage);if (currentHealth - attacker.damage > 0){currentHealth -= attacker.damage;//触发一次伤害,就变成无敌TriggerInvulnerable();//执行受伤OnTakeDanmage?.Invoke(attacker.transform);}else {currentHealth = 0;//执行死亡onDie?.Invoke();}       
}

②playerController脚本:
添加即将添加到事件中的死亡函数,停止输入

public bool isDead;
public void PlayerDie()
{isDead = true;//禁止gameplay下的相关输入inputControl.Gameplay.Disable();
}

③动画脚本:
检测人物控制脚本中角色的死亡状态,填写在转换条件中的布尔变量中

void Update()
{SetAnimation();    
}
public void SetAnimation()
{anim.SetBool("isDead", playerController.isDead);
}
http://www.lryc.cn/news/291203.html

相关文章:

  • 【Java】Springboot入门
  • 专业138总分420+中国科学技术大学843信号与系统考研经验中科大电子信息通信
  • 携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX
  • Android中C++层fstream用法详解
  • git clone常见问题一览及解决方法
  • ​ArcGIS Pro 如何批量删除字段
  • OG Trade在ZKX揭幕:一家基于Starknet的游戏化永续合约交易所
  • ubuntu 22.04 安装redis并设置远程连接
  • MemcachedRedis构建缓存服务器
  • Python编辑开发 --- pycharm pro 中文
  • Linux的 .bashrc 有什么作用?
  • .ui文件相关
  • 【DOCKER】docker 安装sonarque
  • 解决IDEA报错端口被占用的问题
  • IDEA:git 回滚本地提交-git 选择 Reset Current Branch to
  • Docker核心教程
  • React通用后台模板
  • 【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图
  • day38_MySQL
  • element ui组件 el-date-picker设置default-time的默认时间
  • ###C语言程序设计-----C语言学习(8)## 斐波那契数列问题,素数问题,人数分配问题。
  • 蓝桥杯 第 1 场 小白入门赛
  • 飞天使-linux操作的一些技巧与知识点5-expect与docker便捷命令
  • 编曲学习:和声音程 调式体系 唱名法 调式调性
  • 【大数据】Flink 架构(四):状态管理
  • 执行rpm安装命令的时候抛出异常:rpmdb BDB0113 Thread/process
  • Android 在WebView中加载H5传递图片
  • 图的学习
  • 空间数据分析入门POI与莫兰指数基础知识笔记
  • TortoiseSVN各版本汉化包下载