【unity】学习制作2D横板冒险游戏-3-

news/2025/2/28 19:56:45/文章来源:https://www.cnblogs.com/plusu/p/18667585

添加野猪

添加刚体2D组件,碰撞组件,该碰撞组件是确保野猪能跟地面碰撞

添加玩家图层和敌人图层,并应用,使野猪和玩家不会彼此被推着走

碰撞剔除中选择Player和Enemy

再增加一个碰撞组件当作触发器,设置如下,该碰撞组件是确保人物和怪物的互动

基本属性及其计算

再如图路径下创建Character脚本负责基本属性和计算,并应用给Player和Boar

无敌时间和伤害计算

在受到伤害时进行血量计算并进入到无敌时间,运用到计时器的方法来控制无敌时间,在无敌时间中不会受到伤害

攻击

在如图路径下创建Attack脚本负责攻击的计算,并应用给Player和Boar

在attack中的攻击触发代码

private void OnTriggerStay2D(Collider2D other):这是一个Unity中特有的回调函数,当另一个游戏对象(带有Collider2D组件)与当前游戏对象(此脚本所挂载的对象,且该对象需要有Collider2D组件,并设置为触发器(Is Trigger))在2D空间中接触开始时,这个函数会被自动调用。other参数代表与当前对象接触的游戏对象的Collider2D组件。

other.GetComponent()?.TakeDamage(this);:这行代码尝试从other游戏对象(即与当前触发器接触的游戏对象)上获取一个Character类型的组件。
如果other游戏对象上确实有这个Character组件,那么?.操作符(C#的空条件访问操作符)会确保如果GetComponent()返回的不是null,则调用TakeDamage(this)方法。
这里的TakeDamage(this)方法是Character类中的一个方法,用于处理角色受到伤害的逻辑,this指的是当前触发这个事件的触发器对象(此脚本所挂载的对象,即伤害来源)。

受伤和死亡动画

在上面的Character代码中编写了让血量减少或为零的代码,减少时执行受伤动画,当血量为零时执行死亡动画

受伤动画

死亡动画

在受伤时,玩家会闪烁以此来告诉玩家受伤并进入到了无敌状态
因此创建一个新的动画层Hurt :layer

设置参数如下

Weight代表了当前这个Layer中的动画会在多大程度上影响整个动画的最终表现。
Weight的值为0时,表示该层权重是0,即该层不生效,这一层的动画就像不存在一样。
Weight的值为1时,表示该层权重为1,即该层中的动画能完全表现。
当存在多个Layer且都设置了非0的Weight时,这些Layer的动画会按照各自的Weight进行混合,共同影响最终动画的表现。

Blending Modes(混合模式)是决定动画层之间如何相互作用的关键属性。
Override(覆盖):
当使用覆盖模式时,当前动画层的动画会完全替代下层动画。
如果当前动画层的Weight(权重)为1,则下层动画完全被当前动画覆盖,不会显示。
如果Weight在0到1之间,则会出现两个动画的混合效果,但实际上是其效果根据Weight进行了一定程度的“淡化”或“强化”
适用于需要完全替换下层动画的场景,如角色从行走状态切换到跑步状态时。
Additive(添加):
在添加模式下,当前动画层的动画会在下层动画的基础上叠加。
Weight决定了当前动画层动画对下层动画的影响程度。Weight为1时,当前动画完全叠加在下层动画上;Weight为0时,当前动画不生效。
这种模式适用于需要在不改变下层动画基础动作的前提下,添加一些额外的动作效果,如面部表情、肢体抖动等。

制作的思路就是在原动画和新创建的动画中执行被击中的状态,但一个有素材一个空素材交替之下就变成了人物的闪烁
创建一个新的动画blue Hurt2但不添加素材

在这里我们可以修改各样的参数

找到如下组件,rgb为三原色,a为阿尔法值,表示人物的透明度

将0.2S的a改成 0.5

人物肉眼可见透明了

依次改一下其他时间的透明度保证动画平稳闪烁

状态树添加动画

转换条件为Trriger触发器hurt当触发时。进入。设置如下

当执行完后退出,设置如下

在控制组件代码中写入如下代码
因为trriger触发器可以在被设置为true时触发一次状态转换,并且在转换完成后自动重置为false。不用再update中一直更新,所以单独写

在受伤时,程序要执行很多功能调用很多的代码,如无敌状态,ui的变化,因此引入事件

事件 Events 用于在特定情况下触发特定的行为或动作。Unity提供了多种处理事件的方式,包括使用Unity引擎内置的事件系统、通过脚本监听和处理事件,以及利用UI组件的事件系统来构建交互式用户界面。

调用命名空间

创建事件

反映到unity的Character组件中

添加函数方法,即受到伤害时,执行playAnimation中的PLayHurt方法

启动事件代码,事件中有一个参数,传入attacker的参数

受伤被弹开的效果

定义变量

编辑代码

修改移动

添加进事件

设置反弹力

现在还没有在被反弹后的ishurt状态中退出的功能
进入Animator选中playerHurt2添加HurtAnimation脚本

在该脚本中输入代码使该动作结束时ishurt = false

死亡动画

修改状态树

转换设置如下

死亡状态退出

在死亡后也要执行诸如游戏通知你死亡并重新开始等等事情,因此定义一个事件

事件的执行代码

事件的方法:如果死亡了,玩家就无法控制人物了

定义死亡状态

编辑代码

在Animation中获得player Controller.isDead

现在,在玩家死亡后会“反复去世”,取消动作的循环播放

有很多动作都是需要取消循环播放的,但是只要不连接到AnyState中就不会有问题

悲T_T

三段攻击的实现

创建三个攻击动画,状态树如下

条件分别为bool和trigger和int类型

第一个转换条件如下

不过后两个要有过度时间,即后摇

当任意一个动作完全被执行完才能退出动作,即动作的后摇,其余同理

在input系统中添加攻击按钮

调用Animation触发器和isAttack和combo

在PlayerController中获得Animation组件,和bool值

创建一个计数器,用来进行攻击123的转变

玩家攻击函数如下

完成,但是出现一个问题,连续快速按攻击会导致combo快速改变值,使攻击一直处于第一段攻击第一段
暂时先删除combo后续进行优化

退出isAttack状态

添加行为

退出代码如下

给每一个攻击状态都添加该行为

成功,现在可以退出isAttack了

实装攻击判定和伤害

在Player下创建子物体如图

为子物体添加碰撞体,且为触发器

希望触发时间为挥刀时,如图

调整范围,三段攻击同理,

CTRL删除线

如何在这一瞬间触发呢,用到改变颜色时的方法,通过开启关闭Attack来实现

在帧动画中添加控制该功能的组件

在第1帧关闭,第三帧开启,第四帧关闭,其余两端攻击同理

把攻击脚本加入,并设置伤害

注意,要默认把Attack关掉

防止攻击碰撞和人物碰撞

野猪有两个碰撞体,优先以capsule碰撞体判断

OnTriggerStayD的休眠时间

在测试过程中,发现人物在移动时攻击野猪才会掉血,而人物和野猪静止后攻击不掉血
这是因为OnTriggerStayD的休眠时间,他被触发一段时间后自动停止。碰撞盒移动后才会再次触发该函数

修改休眠方法(默认为0.5)

成功,现在原地不动也可以使野猪血量减少

走路攻击

希望在攻击时人物不能进行移动
修改代码

修改完代码后,由于地面时光滑的,人物会由于加速度仍然往前滑行
添加带有摩檫力的材质,normal为0.4,wall为正常

给PLayer应用normal材质

现在,在两次攻击的间隔处人物还可以进行移动的操作
这是因为在退出一段动作时isattack为false,而只有按下J键时isAttack变为true
中间会出现空隙,如果不喜欢这样的手感,可以在动画事件start中加入修改,(这里不做修改)

材质问题

由于修改了材质,所以现在又出现了黏墙的问题
希望在跳起来时为wall光滑材质,在地面上时为摩檫力材质

获取物理材质并定义

代码如下

在update中更新该函数

完成

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远控流畅游戏,我用过最棒工具ToDesk

孤独乏味人又懒,能够干嘛来消遣?手游、端游都好玩,没有高端设备在身边,也是能够轻松玩!究竟怎么实现的?其实就是通过ToDesk这种专业的远程控制软件来随时随地操作异地的目标设备从而帮助实现更丝滑给力的远程游戏畅玩体验!当然,用户能够借助完成这需求的辅助工具并不止…

C# Odbc Informix读取中文方法

一。 部署好informix服务器后 二。 在windows主机安装好Informix Client-SDK, 这个软件客户端时免费的,可以在官网下载 三。配置好ODBC连接 1.用户名密码服务端口自行填写 2.关于客户语言的配置要使用以下参数: Client Locale -> en_US.CP1252 Database Locale -> en_…

ToDesk远程连接几项模式区别何在?

对于很多用过ToDesk远程控制软件进行随时随地跨系统、跨设备操作的小伙伴们来说,它无疑能解决做种场景下问题,无论是在职场工作中,还是日常生活中,均能带来很多便捷!虽然轻松使用很简单,但很多所不知道的是其实应对不同的情况,选择不同的连接模式更有益!以下木木小编就…

如何在网站后台修改首页?

修改网站后台首页通常涉及对后台管理界面的调整。以下是详细步骤:登录后台:使用管理员账号登录网站后台管理系统。 进入模板管理:在后台管理系统中找到“模板管理”或“模板文件管理”选项。 编辑模板文件:找到后台首页的模板文件(如index.htm或index.php),使用代码编辑…

一些关于软件测试中登录模块的测试用例

以下是一份针对软件测试中登录模块较为完整的测试用例,涵盖了各种常见情况,尽量保证较高的覆盖率:一、功能测试1. 正常登录 2. 用户名错误 3. 密码错误 4. 用户名和密码都错误 5. 用户名和密码为空 6. 仅用户名为空 7. 仅密码为空 8. 用户名和密码长度极限值 9. 记住用户名…

如何修改网站管理员admin的信息?

登录网站后台:使用管理员账号(通常是admin)登录到网站的后台管理界面。进入用户管理页面:在后台管理界面中,找到“用户”、“用户管理”或类似的菜单选项,点击进入用户管理页面。找到管理员账号:在用户管理页面中,找到管理员账号(通常是admin),点击账号名称或编辑按…

如何在网站上修改源代码?

要在网站上修改源代码,您可以按照以下步骤进行操作:确定要修改的代码:确定您想要修改的网站源代码文件。 找到代码文件:根据您的网站结构,找到包含要修改代码的文件。 编辑代码文件:使用文本编辑器或专业的网页设计工具,编辑代码文件中的代码。 保存修改:修改完成后,保…

如何在CMS系统中动态修改网站栏目?

在CMS系统中动态修改网站栏目通常涉及后台管理界面的操作。以下是详细步骤:登录后台:使用管理员账号登录CMS后台管理系统。 进入栏目管理:在后台管理系统中找到“栏目管理”或“频道管理”选项。 编辑栏目:选择需要修改的栏目,进行编辑。可以更新栏目名称、描述、排序等信…

补充篇:Unity中Compute Shader的基本使用

补充篇:Unity中Compute Shader的基本使用 Compute Shader 可以充分利用GPU来帮助我们处理大规模的并行任务。虽然名字带Shader,但它可不光用于图形学,所以即便对渲染相关的知识不甚了解,也不妨碍学习它的用法。 基本流程 对任意 Project的文件夹右键Create/Shader/Compute …

修改网站首页大图通常涉及到更新网站首页的图片文件

找到图片文件:首先需要找到网站首页大图的图片文件所在的位置。通常,网站的图片文件会存储在服务器的特定目录中,例如 images 目录。 备份原图片:在修改之前,建议先备份原图片,以防修改过程中出现问题需要恢复。 准备新图片:准备好要替换的新图片,确保新图片的尺寸和格…

怎样修改网站公司名称

修改网站公司名称通常涉及到更新网站的标题、版权信息、联系方式等相关内容。以下是一些常见的方法:网站标题修改:在网站的HTML代码中,找到 <title> 标签,并将其中的公司名称修改为新的名称。例如: <title>新公司名称 - 网站首页</title>版权信息修改:…

改图标网站设计图排版

修改图标网站设计图排版可以从以下几个方面入手:确定排版风格:根据网站的整体风格和定位,确定图标的排版风格,如对齐方式、间距、大小比例等。 调整图标位置:使用设计工具(如Adobe Photoshop、Sketch等)打开设计图,将图标拖动到合适的位置,确保布局合理、美观。 统一图…