Unity2D游戏制作入门 | 14( 之人物实装攻击判定 )

上期链接:Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )-CSDN博客

上期我们聊到给人物添加三段攻击的动画,通过建立新的图层动画当我们按下攻击按键就会自动切换进攻击的动画,如果我们连续按下攻击键,我们还可以进行好几段的攻击。因为攻击的检测是当我们按下按键时才触发的,所以使用了注册事件的方式进行启动攻击动画,然后在攻击动画退出后我们还使用代码修改人物攻击状态为flase以此来让人物不要继续播放攻击动画。这期我们来让人物有真正的攻击伤害,即人物实装攻击的判定。
这期代码不是很多,请在关键代码处添加即可。如果不知道在哪份代码文件下添加请查看往期。

正文:

​ 我们将使用触发器的方式来执行攻击。我们选中物体:人物,然后在Animation中查看人物的攻击动画,我们观察人物攻击的关键帧,即人物出刀的那一帧有白色的刀影,我们需要在它身加上触发器,即关键帧的触发,然后先要规定这个触发器的范围(你也可以理解为形状,因为当其他碰撞体进去该触发器范围就会启动触发器)

在这里插入图片描述

然后接下步骤有点多,根据下图:因为人物不能那么多的碰撞体,所以我们在人物下创建新的子物体,然后统统改名方便我们管理。然后添加Polygon多边形碰撞体,记得把isTrrigger选项勾选起来,然后在人物关键帧出让多边形吻合我们的刀影,最后在人物攻击动画下的AddProperty添加Attack1的isActive。这个isActive是控制物体的开启和关闭,举例如果把人物这个物体名称旁的正方形选项点击为不勾选的状态,那么人物就会在场景中消失,就是这个意思,所以我们需要通过这个开关来控制攻击触发器的开启和关闭,所以在关键帧打开这个触发器即可,需要注意的是,如果你要运行游戏试玩的话一定要先关闭攻击的碰撞体。
在这里插入图片描述

因为人物的第一段攻击是在第四帧才有刀影,所以我们把其他帧的isActive关闭即可。然后再播放人物的第一段攻击动画(记得把编辑多边形的功能关闭了,让那个绿色的边框给取消),然后发现人物在攻击的关键帧才会出现白色的边框(那是触发器的形状)。
在这里插入图片描述

然后让每个攻击的状态挂载上Polygon碰撞器,然后绘制好边再在关键帧启动它,这需要重复工作,然后每次攻击状态都要挂载上Attack的代码让每段攻击拥有伤害值,第一和第二段为10,第三段为暴击输入20。
在这里插入图片描述

然后根据代码:我们发现Attack的代码是获取物体身上的Character代码去执行TakeDamage的函数方法,但是我们人物也是有初始的碰撞体(胶囊碰撞体)所以如果我们攻击,会伤害到我们人物自己。

private void OnTriggerStay2D(Collider2D other)
    {
        other.GetComponent<Character>()?.TakeDamage(this);//加问号处为语法唐,意思是对面身上有对应函数我才执行。
    }

所以我们需要让我们攻击状态下的触发器和敌人发生关系就好了,三段攻击都需要修改一下。

在这里插入图片描述

如果发现人物攻击野猪时,野猪没有受到伤害,那么我们去把野猪身上的胶囊碰撞体的碰撞优先级打开(因为野猪身上有两个碰撞体所以可能会判断失误),测试的时候记得给野猪规定无敌时间1秒或多少都可以。
在这里插入图片描述

测试的过程中发现人物还能边走边攻击,这个不是我们想要的,所以我们需要限制一下人物。我们在人物控制代码中添加条件!isHurt&&!isAttack,也就是只有在没有受伤和人物攻击时我们可以进行位移。然后需要注意的是:之前我们在攻击动画退出后添加代码已更改人物的攻击状态isAttack为flase,这里我们不需要修改啥了。

private void FixedUpdate()//固定频率运行,即0.02秒执行一次。跟物理有关的放在这执行
    {
        if (!isHurt&&!isAttack)
        {
            if (isShift && physicsCheck.isGround)
                Walk();
            else
                Move();
        }
        
    

但是又有一个问题了,我们跑步后突然攻击还是会有一段的位移,这是因为人物的材质是光滑的所以我们需要规定人物在地上时材质是有摩檫力的,靠近墙体就就是光滑的。所以我们需要修改人物的材质为有摩檫力的即可,然后如果你不希望人物攻击时还有位移,你就可以在攻击动画链接的代码下添加代码:这样人物一攻击就会停下来了。

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        animator.GetComponent<Player_control>().isAttack = true;
    }

然后解决材质问题:所以我们先在人物控制代码中添加材质:我们要用到三元运算符physicsCheck.isGround?normal:wall,如果为true就执行冒号前的。

	private CapsuleCollider2D coll;
	[Header("材质")]
    public PhysicsMaterial2D wall;//碰墙材质摩檫力为0
    public PhysicsMaterial2D normal;//在地上时材质摩檫力是0.8
//在Awack中获得权限
coll = GetComponent<CapsuleCollider2D>();

	//在Update中检测调用
	CheckState();

	//材质替换函数
	private void CheckState()
    {
        coll.sharedMaterial=physicsCheck.isGround?normal:wall;
    }

总结:

这节我们学习了人物在攻击动画中添加关键帧来用触发器的方式进行人物的攻击是否启动的问题,我还让人物只对敌人造成伤害(排除人物自己不然就会受到攻击)。然后我们还规定了人物攻击时是不能移动的(因为我们没有边跑边攻击的动画绘制),然后还修复了短暂性的人物攻击状态为true却一直不是true的状态(就人物如果一直在播放攻击的动画那么它应该一直是true,这样不会立马播放动画后我们又可以继续移动了)。最后我们还解决了材质的问题,当我们的人物在地上时我们的人物材质是有摩檫力的,一旦离开地面我们的人物就是光滑的材质。但是还是有一个问题没有解决,**如果贴墙跳会跳不高因为当时人物的才是是normal,所以需要解决这个问题。**其次爬墙、滑铲这里的UP只限在付费课堂获取,所以需要靠自己去解决。

补充:

1、如果使用Polygon多边行,在变出弄出了更多的锚点,如果想取消只能按下Ctrl键加左键再点击边就能实现取消了。

未尽事宜以后可能会补充。

---------------------结束线

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Simulink代码生成: 基本数据类型

文章目录 1 引言2 Simulink中的基本数据类型3 数据类型实例3.1 浮点类型3.2 整数类型3.3 布尔类型 3 数据类型使用的注意点3.1 浮点数等于比较3.2 整形数溢出3.3 布尔类型的位域 4 关于定点数的说明5 总结 1 引言 正如C语言中为变量区分了不同的数据类型一样&#xff0c;Simul…

三个“消失” 折射债市新变化

资金分层现象逐步消失&#xff1b;低位的DR007利率已不常见&#xff1b;债市中一度盛行的“滚隔夜”也在逐渐减少。 当前&#xff0c;债券市场正在出现一系列显著变化&#xff1a;资金分层现象逐步消失&#xff1b;低位的DR007利率已不常见&#xff1b;债市中一度盛行的“滚隔…

天润融通:AI助手助力Klarna实现多语言客户服务革新

AI 助手可以在客户服务上发挥多大的作用&#xff1f;瑞典一家金融科技公司Klarna的尝试用数据说明了一切。 作为一家全球领先的“先买后付” (BNPL) 服务提供商&#xff0c;Klarna的业务覆盖全球45个国家&#xff0c;拥有1.5亿活跃用户&#xff0c;每天交易量达到200万笔。 为…

DuDuTalk:智能电子录音工牌在销售场景的应用价值

在快速变化的市场环境中&#xff0c;销售团队面临着日益激烈的竞争和不断变化的客户需求。为了提升销售效率、优化客户体验并加强团队协作&#xff0c;越来越多的企业开始采用智能电子录音工牌作为销售场景中的关键工具。本文将从多个方面探讨智能电子录音工牌在销售场景中的应…

为微信小程序项目添加eslint

背景 在使用vscode开发微信小程序的过程中&#xff0c;修改js的时候发现没有报错提示&#xff0c;让我很不习惯&#xff0c;所以想为微信小程序项目添加eslint配置 编码实战 为微信小程序配置ESLint可以遵循以下步骤&#xff1a; 安装ESLint及其相关插件 首先&#xff0c;…

VSG/VSA 矢量信号模拟/分析软件

_Ceyear思仪 _ VSG/VSA 矢量信号模拟/分析软件 苏州新利通仪器仪表 在现代无线通信中&#xff0c;IQ调制属于标准配置&#xff0c;经常应用于通信系统的信号调制和解调环节。IQ调制的应用简化了通信设备的硬件结构&#xff0c;同时提高了频谱资源的利用效率&#xff0c;提…

免费域名第二弹:手把手教你获取个性化免费域名并托管至Cloudflare

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 免费申请域名的方法 📒📝 注册账号📝 创建免费域名📝 将域名添加到 Cloudflare⚓️ 相关链接 ⚓️📖 介绍 📖 在如今的数字时代,拥有一个个性化的域名已经成为越来越多人的需求。无论是建立个人博客、项目展示,还…

07.MyBatis映射器:一对一关联查询

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的金融摸鱼侠&#xff0c;欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 《MyBatis 映射器&#xff1a;实现简单的 SQL 语句》中&#xff0c;我们在 MyBatis 映射器的查询语句中使用 resultType 元…

面向对象复习(java)

文章目录 包在本地 cmd 编译包规则import(导包&#xff09; thisthis 访问实例方法this 访问构造方法 supersuper 访问父类构造器super访问父类方法super 访问父类属性 构造方法访问权限封装继承细节方法重写(覆盖)子父类同名变量问题关于子父类方法的继承问题 多态向上转型和向…

创新入门 | 病毒循环Viral Loop是什么?为何能实现指数增长

今天&#xff0c;很多高速增长的成功创业公司都在采用”病毒循环“的策略去快速传播、并扩大用户基础。究竟什么是“病毒循环”&#xff1f;初创公司的创始人为何需要重视这个策略&#xff1f;这篇文章中将会一一解答与病毒循环有关的各种问题。 一、什么是病毒循环&#xff08…

NV-Embed论文阅读笔记

这是NVIDIA的一篇论文&#xff0c;LLM通常使用的是GPT的decoder范式作为一个生成模型&#xff0c;文章探讨如何利用这样的decoder生成模型来实现BERT这样的encoder的功能&#xff0c;即提取有效的embedding。现有的方法提取embedding的方式无非是 1 mean pooling&#xff1b; 2…

算法竞赛数论杂题

menji 和 gcd 题目&#xff1a; 一开始以为是只有l不确定&#xff0c;r是确定的&#xff0c;这样的话我们可以枚举r的所有约数&#xff0c;然后对其每个约数x进行判断&#xff0c;判断是否满足题意&#xff0c;具体做法是先让l % x如果 0则该约数可行&#xff0c;如果不可行…

蚓链数字化生态平台,开启企业未来新篇章!

在如今数字化浪潮势不可挡的时代&#xff0c;企业发展可谓是机遇与挑战并存&#xff01;而蚓链数字化生态平台系统的出现&#xff0c;绝非是给企业一套平平无奇的营销方案或工具那么简单。 它赋予企业的&#xff0c;是在产业生态链中获取海量数据价值的关键且强大的能力&#x…

嵌入式linux系统中SPI子系统验证03

今天主要给大家分享一下&#xff0c;如何使用SPI总线进行验证的方法。 第一&#xff1a;SPI验证流程 1. echo 1 > /dev / spidev3.0 2&#xff0e;逻辑分析仪抓波形 3.十六进指转化为十进制 4.ASCII字符代码表匹配 第二&#xff1a;SPI验证结果 第三&#xff1a;设备…

kotlin函数

1、函数定义 // 下边定义了main函数 fun main() {} 2、函数的类型 // foo函数定义 fun foo () {} // 对应无参类型 () -> Unit fun foo (a: Int):String {} // 对应有参类型 (Int) -> String 3、函数的引用 函数的引用类似C语言中的函数指针&#xff0c;可用于函数传…

鸿蒙HarmonyOS实战:渲染控制、路由案例

条件渲染 简单来说&#xff0c;就是动态控制组件的显示与隐藏&#xff0c;类似于vue中的v-if 但是这里写法就是用if、else、else if看起来更像是原生的感觉 效果 循环渲染 我们实际开发中&#xff0c;数据一般是后端返回来的对象格式&#xff0c;对此我们需要进行遍历&#…

图解Linux内核(基于6.x):解读Linux内存反向映射之匿名映射

文章目录 &#x1f4d1;前言一、匿名映射的mapping二、推荐阅读2.1 一图速览2.2 内容简介 &#x1f4d1;前言 内存映射中&#xff0c;我们经常讨论的是由虚拟内存定位物理内存&#xff08;也就是folio或者page&#xff09;&#xff0c;实际上在很多场景中&#xff08;比如内存回…

【C语言】C语言入门宝典:核心概念全解析

. C语言专栏 | C专栏 &#x1f449; 个人主页 &#x1f448; 前言 此篇文章我们主要是宏观的了解一下什么是C语言&#xff0c;C语言里面有那些知识点&#xff0c;所有的知识点我们此篇只是以入门为主&#xff0c;点到为止&#xff0c;简单易懂&#xff0c;后期的文章会一 一详…

【APP_PDD】数据采集案例拼多多APP_抓包分析_①

那远山呼唤我 曾千百次路过 半山腰摘几朵 便飘向歌颂者 那份简单 离开后 就再也没见过 单程票的火车 一路上哼着歌 &#x1f3b5; 王睿卓/Damn5z《重生之我在异乡为异客》 使用charles抓包 操作app后发现&#xff0c;刚打开app时可以抓到零散的数据包&am…