『功能项目』怪物受击的动画事件【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

相关文章

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕