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

news2024/11/27 8:42:52

上期链接: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键加左键再点击边就能实现取消了。

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

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

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

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

相关文章

Linux系统:信号概念 信号产生

Linux系统&#xff1a;信号概念 & 信号产生 信号概念信号产生软件信号killraiseabortalarm 硬件信号键盘产生信号硬件中断 信号概念 信号是进程之间事件异步通知的一种方式 在Linux命令行中&#xff0c;我们可以通过ctrl c来终止一个前台运行的进程&#xff0c;其实这就是…

利用K8S技术栈打造个人私有云

1.三个节点&#xff1a;master&#xff0c;slave&#xff0c;client 在Kubernetes集群中&#xff0c;三个节点的职责分别如下&#xff1a; Master节点&#xff1a; docker&#xff1a;用于运行Docker容器。 etcd&#xff1a;一个分布式键值存储系统&#xff0c;用于保存Kuberne…

微信投票源码系统+礼物+道具投票 无限多开 带完整的安装代码包以及搭建教程

系统概述 微信投票源码系统是一款基于先进技术开发的综合性投票平台&#xff0c;它不仅融合了传统投票的核心功能&#xff0c;还创新性地引入了礼物和道具投票机制&#xff0c;为用户带来了全新的投票体验。 该系统支持无限多开&#xff0c;这意味着用户可以根据实际需求&…

AI写真:ControlNet 之 InstantID

但是 IPAdapter-FaceId 目前只在 SD 1.5 模型上表现较好&#xff0c;SDXL 模型上的表现较差&#xff0c;不能用于实际生产。可是很多同学已经在使用SDXL了&#xff0c;而且SDXL确实整体上出图效果更好&#xff0c;怎么办&#xff1f; 这篇文章就来给大家介绍一个在SDXL中创作A…

多线程环境下,HashMap 为什么会出现死循环?

引言&#xff1a;HashMap作为一个常用的键值对存储结构&#xff0c;其内部实现在不同的JDK版本中有所演变&#xff0c;但其基本原理始终是通过哈希算法和数组来实现快速查找和存储。我们将探讨HashMap在多线程环境下出现死循环的根本原因&#xff0c;深入分析其中的数据结构特点…

网络安全(完整)

WAPI鉴别及密钥管理的方式有两种&#xff0c;既基于证书和基于预共享密钥PSK。若采用基于证书的方式&#xff0c;整个国产包括证书鉴别、单播密钥协商与组播密钥通告&#xff1b;若采用预共享密钥方式&#xff0c;整个国产则为单播密钥协商与组播密钥通告蠕虫利用信息系统缺陷&…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…

国产24位I2S输入+192kHz立体声DAC音频数模转换器CJC4344

CJC4344是一款立体声数模转换芯片&#xff0c;内含插值滤波器、multi bit数模转换器、输出模拟滤波器。CJC4344系列支持大部分的音频数据格式。CJC4344基于一个带线性模拟低通滤波器的四阶multi-bitΔ-Σ调制器&#xff0c;而且本芯片可以通过检测信号频率和主时钟频率&#xf…

新能源汽车的能源动脉:中国星坤汽车电缆在新能源汽车电气化中的应用!

随着新能源汽车行业的蓬勃发展&#xff0c;汽车电缆组件作为汽车电气系统的核心组成部分&#xff0c;其重要性日益凸显。中国星坤汽车电缆组件以其卓越的性能和创新技术&#xff0c;为汽车的电能传输、信号传递和控制提供了坚实的保障。本文将深入解析星坤汽车电缆组件的特性、…

PCB雕刻切割用德国自动换刀主轴SycoTec 4033 AC-ESD

随着电子行业的蓬勃发展&#xff0c;印刷电路板&#xff08;PCB&#xff09;的应用范围正在迅速扩大&#xff0c;涵盖了通信、计算机、消费电子等诸多领域。伴随着PCB的广泛应用&#xff0c;对PCB板切割加工技术的要求也日益严格。高速电主轴作为分板机的关键零部件之一&#x…

Pyqt QCustomPlot 简介、安装与实用代码示例(三)

目录 前言实用代码示例Line Style DemoDate Axis DemoParametric Curves DemoBar Chart DemoStatistical Box Demo 所有文章除特别声明外&#xff0c;均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 nixgnauhcuy’s blog&#xff01; 如需转载&#xff0c;请标明出处&#x…

最新QT安装程序安装QT旧版本

1、下载Qt在线安装程序 官方下载地址&#xff1a;https://download.qt.io/official_releases/online_installers/ 也可以选择国内镜像地址下载&#xff0c;如清华大学的镜像地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/…

C#ListView的单元格支持添加基本及自定义任意控件

功能说明 使用ListView时&#xff0c;希望可以在单元格显示图片或其他控件&#xff0c;发现原生的ListView不支持&#xff0c;于是通过拓展&#xff0c;实现ListView可以显示任意控件的功能&#xff0c;效果如下&#xff1a; 实现方法 本来想着在单元格里面实现控件的自绘的…

python-日历库calendar

目录 打印日历 基本日历类Calendar TextCalendar类 HTMLCalendar类 打印日历 设置日历每周开始日期(周几) import calendarcalendar.setfirstweekday(calendar.SUNDAY) # 设置日历中每周以周几为第一天显示 打印某年日历 print(calendar.calendar(2024, w2, l1, c6, m…

事实证明:企业级中后台框架,大厂还是主角,小厂打酱油。

提及中后台框架&#xff0c;你或许能够想到antdesign、arcodesign还有fusion等等&#xff0c;这些都是背靠大厂&#xff0c;是市场的主角&#xff0c;而一些小厂框架往往是扮演者陪太子读书的角色。本文将给大家分享市面上有哪些大厂的中后台框架&#xff1f;为什么大厂要开源自…

MySQL修改用户权限(宝塔)

在我们安装好的MySQL中&#xff0c;很可能对应某些操作时&#xff0c;不具备操作的权限&#xff0c;如下是解决这些问题的方法 我以宝塔创建数据库为例&#xff0c;创建完成后&#xff0c;以创建的用户名和密码登录 这里宝塔中容易发生问题的地方&#xff0c;登录不上去&#…

29. 透镜阵列

导论&#xff1a; 物理传播光学&#xff08;POP&#xff09;不仅可以用于简单系统&#xff0c;也可以设计优化复杂的光学系统&#xff0c;比如透镜阵列。 设计流程&#xff1a; 透镜阵列建模 在孔径类型中选择“入瞳直径”&#xff0c;并输入2 在视场设定中。设置一个视场&…

求二叉树最大深度-二叉树

104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 1、用层序遍历&#xff0c;一层层遍历 class Solution { public:int maxDepth(TreeNode* root) {if(root nullptr)return 0;vector<TreeNode*> que;que.push_back(root);int res 0;//记层数while(!que.e…

【GIS技术】Shp矢量图斑数据的四至点坐标或四至坐标计算

经常有从事gis相关、地信相关行业的朋友或者是需要对图斑矢量进行四至坐标的计算的时候&#xff0c;按照各类搜索引擎或者是教学文章中的教学步骤求出来的四至坐标是错的。特别是比如林业图斑求四至点、农田四至点等等。 错的原因在于很多文章中教学的四至坐标实际上指的是图斑…

带你走进CCS光源——环形低角度光源LDR2-LA系列

机器视觉系统中&#xff0c;光源起着重要作用&#xff0c;不同类型的光源应用也不同&#xff0c;选择合适的光源成像效果非常明显。今天我们一起来看看CCS光源——工业用环形低角度光源LDR2-LA系列。 LDR2-LA系列 采用柔性基板&#xff0c;创造最佳倾斜角度。 通过从低角度向…