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

2024-08-28 22:12

本文主要是介绍『功能项目』怪物受击的动画事件【10】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们打开上一篇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

这篇关于『功能项目』怪物受击的动画事件【10】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116028

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF