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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下