『功能项目』怪物受击的动画事件【10】

news2024/9/19 10:48:48

我们打开上一篇09着色器光透魔法球的项目,

本章要做的事情是在场景中创建一个怪物对象,当怪物被主角的魔法球击中后播放受击动画效果,此类技术用到动画事件帧,在动画上创建脚本。

首先打开资源商店选择一个免费资源的怪物模型加载至项目中

将导入包的熊Bear资源模型Prefab放置场景中

完全解压缩

创建一个怪物熊的动画状态机

命名为MonsterBearAC

在新建动画状态机中填入动画

添加线的参数

创建线

设直线

创建返回线

拖拽动画状态机

创建一个脚本MonsterBear.cs

编写脚本

using UnityEngine;
public class MonsterBear : MonoBehaviour{
    int hp;
    public int Hp {
        get { return hp; }
        set { hp = value; }
    }
    Animator animator;
    void Start(){
        Init();
    }
    void Init() {
        hp = 300;
        animator = GetComponent<Animator>();
    }
    void OnTriggerEnter(Collider other){
        if (other.CompareTag("Damage")) {
            Destroy(other.gameObject);
            transform.LookAt(GameObject.FindGameObjectWithTag("Player").
                transform.position + new Vector3(0, 0.3f, 0));
            animator.SetTrigger("HitTrigger");
        }
        if (hp <= 0){
            Destroy(gameObject);
        }
    }
}
将脚本挂载至场景中的怪物熊对象身上 并增加两个组件 

这里增加Box Collider组件与Rigidbody组件是因为为了激活OnTriggerEnter(Collider other)函数

OnTriggerEnter(Collider other)函数被激活的条件是有两个碰撞器,其中一个要打开触发器也就是勾选Collider下的IsTrigger,且两个物体发生碰撞时需要其中一个物体具有刚体组件Rigidbody

同样我们需要在发生碰撞的魔法球预制体中添加Collider并勾选触发器IsTrigger

对Resources包下的Sphere对象增加一个标签Tag

命名为Damage后保存

将Damage标签挂至魔法球Prefab预制体身上

运行项目后控制主角发射魔法球击中怪物熊后,即可实现怪物熊受击效果的实现

但这时我们要实现的效果,

接下来我们要在怪物熊的受击动画上挂在一个脚本,让怪物熊实现受击后退的效果,并在血量低于0后播放死亡动画后在场景中消除。

首先我们找到怪物熊的动画状态机

强调一下要选中同样的动画剪辑

接下来展开Event添加事件

点击之后可以向右滑动添加一个动画事件帧

我们如果想在具体动画的哪个位置增加动画事件帧可以向上拖拽动画播放视频

点击运行与暂停就可以固定我们想在动画哪个位置建立动画事件帧了

重命名动画事件帧名字

点击Apply应用

我们在脚本中增加一个刚刚添加动画事件帧的名字

我们不想怪物在被主角血量消减至0以下触发销毁的效果,

我们想当怪物血量低于0时先触发死亡动画,过3秒后再被消除,则我们需要在怪物熊动画状态机中添加一个死亡动画。

修改脚本

using System.Collections;
using UnityEngine;
public class MonsterBear : MonoBehaviour{
    int hp;
    Rigidbody rb;
    public int Hp {
        get { return hp; }
        set { hp = value; }
    }
    Animator animator;
    void Start(){
        Init();
    }
    void Init() {
        hp = 300;
        animator = GetComponent<Animator>();
        rb = GetComponent<Rigidbody>();
    }
    void OnTriggerEnter(Collider other){
        if (other.CompareTag("Damage")) {
            transform.LookAt(GameObject.FindGameObjectWithTag("Player").
                transform.position + new Vector3(0, 0.3f, 0));
            animator.SetTrigger("HitTrigger");
            Destroy(other.gameObject);
        }
        if (hp <= 0){
            animator.SetTrigger("DieTrigger");
            StartCoroutine(Delay3s());
        }
    }
    public void HitAnimEvent() {
        rb.AddForce(-transform.forward * 5,ForceMode.Impulse);
        hp -= 200;
    }
    IEnumerator Delay3s() {
        yield return new WaitForSeconds(3.5f);
        Destroy(gameObject);
    }
}
运行项目

当怪物熊受击后会播放受击动画并且血量减少并被击退一段距离

当怪物被击中后血量低于0后会播放死亡动画过三秒后消失

本篇只实现了怪物受击的动画事件功能,接下来还需做以下内容:

1.怪物被击退时显示击退图标的效果

2.怪物UI信息血量显示(笼)

3.怪物死亡特效

4.怪物死亡掉落物品

5.掉落物品拾取后的转移与穿戴

6.异步传送转换场景

7.目标点巡航功能

以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。

具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

静态ISP代理IP适合什么应用场景?

随着互联网的普及和发展&#xff0c;越来越多的设备和应用需要接入网络。在这些情况下&#xff0c;动态主机配置协议 (DHCP) 成为一种常见的选择&#xff0c;因为它会自动为客户端分配 IP 地址。然而&#xff0c;在某些特定场景下&#xff0c;静态 IP 地址 (ISP) 可能是更好的选…

哈夫曼树例题

从这道题可以看出需要构建哈夫曼树 构造哈夫曼树如下 9和5最小&#xff0c;构成左右树&#xff0c;二者之和是14&#xff0c;放入数组&#xff0c;5和9从数组去掉 14和16最小&#xff0c;构成左右树&#xff0c;二者之和是30&#xff0c;放入数组&#xff0c;14和16从数组去…

基于yolov8的玻璃瓶塑料瓶检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的玻璃瓶塑料瓶检测系统是一个利用深度学习技术的先进解决方案&#xff0c;专注于对图像、视频或实时摄像头流中的玻璃瓶和塑料瓶进行快速准确的检测与定位。该系统通过YOLOv8这一高效的目标检测算法&#xff0c;能够在多种应用场景下展现卓越的性能。…

Java面试题·解释题

系列文章目录 总章 Java解释题 文章目录 系列文章目录前言面向对象编程是什么&#xff1f;Java的跨平台原理Java的安全性Java的三大版本Java开发运行过程什么是JVM&#xff1f;什么是JDK&#xff1f;什么是JRE&#xff1f;JDK,JRE,JVM三者关系概括Java的数据类型&#xff1f;J…

有没有比较好用的在线翻译工具?实力推荐这4款。

当我们面对外文资料时&#xff0c;可能需要翻阅厚重的词典&#xff0c;耗费大量的时间和精力。在翻译这方面&#xff0c;很多人都十分依赖翻译工具的&#xff0c;因为这些工具只需几秒钟就能给出翻译结果&#xff0c;提高了我们的学习和工作的效率。但是随着翻译工具越来阅读&a…

灵感枯竭?ChatGPT助你轻松完成开题报告!

在学术探索的征途中&#xff0c;撰写论文开题报告是一项至关重要的初步工作。这项工作不仅标志着您研究旅程的起点&#xff0c;也是展现您研究思路和方法论的关键时刻。ChatGPT&#xff0c;作为一款前沿的人工智能工具&#xff0c;将以其深度学习能力&#xff0c;成为您学术探索…

【大模型系列篇】预训练模型:BERT GPT

2018 年&#xff0c;Google 首次推出 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;。该模型是在大量文本语料库上结合无监督和监督学习进行训练的。 BERT 的目标是创建一种语言模型&#xff0c;可以理解句子中单词的上下文和含义&…

数学问题+贪心

前言&#xff1a;一开始我想的就是我每次都设置一个cnt记录每次增加量&#xff0c;后面都增加这个量&#xff0c;但是发现我忘记要把这个量先加到后面的元素上面去 正确的做法就是每次 a [ i ] > a [ i − 1 ] a[ i ] > a[ i-1 ] a[i]>a[i−1] 的时候再进行处理&…

量化交易backtrader实践(四)_评价统计篇(3)_更多评价与可视化

前情回顾 在第(1)节中&#xff0c;我们对于backtrader内置的评价指标一个接一个的进行了实践测试&#xff0c;其中第10个是金融投资组合分析库 - pyfolio&#xff0c;当时我们先去实践了Analyzer中的pyfolio指标&#xff08;其实就是03&#xff0c;07&#xff0c;08&#xff0…

Python TensorFlow入门与实践

摘要 本文旨在详细介绍如何使用Python和TensorFlow进行基本的深度学习任务。我们将从安装TensorFlow开始&#xff0c;逐步讲解如何创建简单的神经网络模型&#xff0c;并通过一个具体的示例来演示如何训练模型。此外&#xff0c;我们还将讨论一些高级主题&#xff0c;如卷积神…

“长风破浪”计划创作营圆满结营 9月10日“2024华韵视听大会”佛山见

8月26日&#xff0c;“长风破浪”青年音乐人唱享计划与青年影视人扶持计划创作营在佛山高明皂幕山上圆满结营。首季创作营历时一周&#xff0c;在高强度的创作中&#xff0c;20位青年影视人和音乐人群策群力&#xff0c;超额完成任务&#xff0c;共创两首歌曲、一部微短剧及一部…

Wails实现桌面番茄钟应用

0.项目背景 最近在优化自己的工作流&#xff0c;在工作方法上开始使用番茄钟来实现时间控制&#xff0c;一直觉得番茄钟的方式有点silly&#xff0c;直到自己用过之后才发现&#xff0c;番茄钟是真的好用&#xff0c;它不止是工作的方法&#xff0c;更是休息的艺术&#xff0c…

流程图还不会画?这个AI工具一键出图,还有上万模版库可选

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 流程图的绘制在工作中很常见。大家在写论文、课题申请等经常会用到需要绘制技术路线、工作流程、病人筛选流程等。 有没有AI工具能够根据我们的描述文字&#xff0c;一键生成流…

aspeed2600 openbmc对mctp over pcie的支持分析(支持mctp over pcie)

遍搜全网&#xff0c;竟然关于openbmc mctp over pcie的支持说明情况了无文章&#xff0c;这不是一个艰难的问题&#xff0c;服务器BMC也不是一个超级精尖的产品&#xff0c;想当年分享stm32资料&#xff0c;都是满天飞。可能服务器市场大家对于文章上的分享并无兴趣。 此篇文…

网络安全总结②

上一篇&#xff1a;网络安全总结① 下一篇&#xff1a; 传统防火墙 传统防火墙 技术&#xff1a;访问控制、代理技术、会话机制 工作层次&#xff1a;应用层一下 防御模式&#xff1a;通过防御设备划分边界&#xff0c;基于IP/端口和特征进行判断&#xff1b;以隔离为基础&am…

【Spring Boot 3】自定义拦截器

【Spring Boot 3】自定义拦截器 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或…

茶余饭后(六)

有人孤立你&#xff0c;证明你强大&#xff1b;有人嫉妒你&#xff0c;证明你出众&#xff1b;有人诋毁你&#xff0c;证明你有能力&#xff1b;有人议论你&#xff0c;证明你有价值&#xff1b;有人利用你&#xff0c;证明你有能力。所以原谅那些诋毁你的人&#xff0c;至少他…

到处在裁员,这个行业却在疯狂招人!

1.裁员浪潮不断 8月26日&#xff0c;IBM中国方面确认了将关闭中国研发部门的消息&#xff0c;这一决策涉及员工数量超过1000人。技术迭代浪潮前&#xff0c;哪怕是名企&#xff0c;攻守防退之间的转换也只在一瞬间。AI引发大裁员&#xff1f;这表明IBM正在积极适应技术变革&am…

win10配置adb环境变量

初始状态&#xff1a; 最简单的配置方案&#xff0c;直接复制adb所在路径&#xff1a; 粘贴进来确定即可&#xff1a; 然后打开 cmd 查看已经配置成功了&#xff1a;

MATLAB 手写Ply文件点云读取类(86)

MATLAB 手写Ply文件点云读取类(86) 一、算法介绍二、算法实现1.PLYReader.m 类文件2.可视化一、算法介绍 PLY是一种常见的点云文件格式,这里尝试手写一个读点云的类,查看是否能正常读取,结果将可视化,具体代码如下: 二、算法实现 1.PLYReader.m 类文件 classdef PLYR…