unity中实现连击按钮切换走路与跑步

这篇具有很好参考价值的文章主要介绍了unity中实现连击按钮切换走路与跑步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自己个人的游戏项目中想要实现这样一个经典的效果:当单击方向键时角色进行走动,此时速度较慢;而当连击两下方向键后角色进行跑动,此时速度较快。那么到底要如何实现这一效果呢?当时为了实现这一效果自己也是查阅了不少博客,但似乎完整实现类似功能的并不多,不过从中有找到灵感然后自己实现了这一效果。

那么明晰了我们想要实现的效果,我们就将要实现的功能进行代码逻辑上的拆分:实际的逻辑可以拆分为以下部分:(1)检测按钮点击、连击;(2)走路与跑步的状态切换,其中包括动画、速度等。

拆分完毕后,我们按步骤来实现对应的功能。首先关于检测按钮的点击和连击,可以想到通过GetKey检测对应按钮的持续按下,此时实际上关于走路的逻辑就可以写在这里了;但为了实现连击的效果,我们显然还要检测一个按钮的抬起,即GetKeyUp。明确检测按钮的按下与抬起后,我们可以想到,连击按钮的本质实质上就是在一个极短的时间内进行了按下——抬起——按下这样的步骤

那么为了实现这一极短时间内的检测,我们需要实现简单的计时器来进行计时,逻辑应当是这样的:如果我们松开按键,记录下松开按键的那个时间点;在按下按键的时候也记录按下按键的那个时间点并与松开按键的那个时间点进行比较,如果小于等于某一个间隔则触发跑步,否则触发走路。通过以上分析后我们可以写出如下代码,其中使用了四个float变量作为计时器变量来计时:

            if (Input.GetKeyUp(KeyCode.LeftArrow))
            {
                releaseLeftTime = Time.time;
                rb.velocity = new Vector2(0, rb.velocity.y);
            }
            if (Input.GetKeyUp(KeyCode.RightArrow))
            {
                releaseRightTime = Time.time;
                rb.velocity = new Vector2(0, rb.velocity.y);
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.localScale = new Vector3(-1, 1, 1);
                pressLeftTime = Time.time;
                if (pressLeftTime - releaseLeftTime <= pressInterval)
                {
                    rb.velocity = new Vector2(-runSpeed, rb.velocity.y);
                }
                else
                {
                    rb.velocity = new Vector2(-speed, rb.velocity.y);
                }
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.localScale = new Vector3(1, 1, 1);
                pressRightTime = Time.time;
                if (pressRightTime - releaseRightTime <= pressInterval)
                {
                    rb.velocity = new Vector2(runSpeed, rb.velocity.y);
                }
                else
                {
                    rb.velocity = new Vector2(speed, rb.velocity.y);
                }
            }

但写出了以上代码进行测试后会发现存在问题,就算通过连击按钮触发了跑步,但也只是在一个极短的时间内进行了跑步然后又恢复成了走路。

为什么会出现这样的情况?我们需要明确一点,我们检测按下实际上检测的是按住角色跑步的同时我们一定是一直按住方向键的

检测跑步的判断条件后会发现,我们只在检测按钮抬起的那一瞬间记录了松开按钮的时间点。再次按下按钮进行检测后或许确实在较短时间内触发了跑步逻辑,但是按住按钮的时间点是在GetKey中不断更新的,而抬起按钮的时间点并未更新,这就导致我们只能在本用来判断连击检测的那一极小的时间段内进行跑步,随后马上就会恢复走路。

为了解决这一问题,我们在跑动的同时也要不断地更新其松开按钮的时间点,这样才能实时保证按住按钮的时间点减去松开按钮的时间点小于我们设定的极短的时间间隔保持在跑步中。

if (Input.GetKeyUp(KeyCode.LeftArrow))
            {
                releaseLeftTime = Time.time;
                rb.velocity = new Vector2(0, rb.velocity.y);
            }
            if (Input.GetKeyUp(KeyCode.RightArrow))
            {
                releaseRightTime = Time.time;
                rb.velocity = new Vector2(0, rb.velocity.y);
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.localScale = new Vector3(-1, 1, 1);
                pressLeftTime = Time.time;
                if (pressLeftTime - releaseLeftTime <= pressInterval)
                {
                    rb.velocity = new Vector2(-runSpeed, rb.velocity.y);
                    releaseLeftTime = Time.time;//跑步过程要持续更新松开键位的时间
                }
                else
                {
                    rb.velocity = new Vector2(-speed, rb.velocity.y);
                }
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.localScale = new Vector3(1, 1, 1);
                pressRightTime = Time.time;
                if (pressRightTime - releaseRightTime <= pressInterval)
                {
                    rb.velocity = new Vector2(runSpeed, rb.velocity.y);
                    releaseRightTime = Time.time;
                }
                else
                {
                    rb.velocity = new Vector2(speed, rb.velocity.y);
                }
            }

还有需要注意的一点,可能有的朋友会觉得这一段代码太冗长了,可以把左右键放在同一个if条件判断里用||同时进行检测。这个取决于你想要实现的游戏效果,因为如果把左右键放在同一个if条件里判断的话显然会有一个问题:如果我先按住左键进入走路,然后松开后迅速按下右键,这样同样会触发向右跑步的逻辑

我把左右键分开进行判断主要就是为了避免这一情况,我希望的是如果角色向左走动,再连击左键的情况下才会进入跑步;而不会有原本朝一个方向走路,通过连击下一瞬间可以朝另一个方向跑步的情况。

那么通过连击切换走路与跑步的效果借助以上代码实际上已经基本实现,其他如果你有布尔变量控制状态的切换、以及切换动画之类的逻辑,这些都可以在上面代码的基础之上进行拓展。最终想要实现怎样的游戏效果当然还是取决于你个人,我只在这里提供一个大体的框架与思路。

这是我第一次分享自己在学习unity做游戏的过程中实现的一些效果的逻辑与代码,可能仍有许多不足的地方,如果大佬们有更好的实现方法或是逻辑欢迎在评论区进行分享!文章来源地址https://www.toymoban.com/news/detail-469093.html

到了这里,关于unity中实现连击按钮切换走路与跑步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pygame按钮集成及界面切换的实现

    pygame是python轻量级的游戏框架,通常用于微型小游戏的创作或者游戏编程思想的教育。pygame的功能集成程度比较低,通常需要将功能代码人工再次集成包装(模块化、类化)才能更好地减少代码量,起到复用的效果。 下面展示一段按钮集成的代码。展示了纯文本(Text), 图片

    2024年02月11日
    浏览(24)
  • U3D通过按钮点击实现场景切换

    1.新建UI,选择button选项,新建button;   3.新建一个空对象,挂载一个scenechange c#脚本; 4.编写脚本,1头文件using UnityEngine.SceneMangement                    2public void change() {                     scenemanager.loadscene (1)  }//括号中的数字为第2步中场景后面的数字          

    2024年02月07日
    浏览(36)
  • vue3中如何实现通过点击不同的按钮切换不同的页面

    完成以上需求,我们可以使用vue中的component标签来实现。 component是Vue.js中一个特殊的标签,用于动态地绑定其它组件。它可以与v-bind:is指令一起使用,来决定要渲染哪个组件。下面是示例代码

    2024年02月09日
    浏览(40)
  • Naive UI+Vue3来实现点击按钮一键切换明暗主题的功能

    记录一下如何使用Naive UI+Vue3代码来实现一键切换明暗主题的功能。 效果如下: 终端下输入: 起好项目的名称,然后一路回车即可。 至此Vue3的项目已经搭建完毕,打开http://127.0.0.1:5173/就可以看到项目的默认首页了。 安装Naive UI依赖库 然后我们根据官方出的配置对项目进行

    2024年02月12日
    浏览(29)
  • 基于html+js实现轮播图(自动轮播、左右按钮、小圆点点击及切换图片)

    使用html和js实现的一个简单小练习轮播图。大概功能主要是: 1、使用时间函数自动切换图片; 2、在图片及按钮及小圆点的父节点身上绑定事件代理,添加mouseenter及mouseleave事件类型,让鼠标移入,图片暂停,移出,图片恢复轮播; 3、在按钮的父节点身上绑定事件代理,事

    2024年02月11日
    浏览(35)
  • 【UE4】 通过按钮点击实现摄像机的切换 并通过鼠标控制新摄像机的旋转

    首先创建了4个Actor蓝图类 每个蓝图类内只拥有一个摄像机组件 将每个actor蓝图类摆放到场景的合适位置 在关卡蓝图中创建自定义事件,当该事件触发时切换摄像机 创建一个控件蓝图,在控件蓝图中创建如下5个按钮,并创建点击事件。按钮分别表示车上的4个镜头和车外自由

    2023年04月09日
    浏览(34)
  • Unity开发日记-进入游戏按钮和退出游戏按钮的逻辑实现

    本篇文章只是总结一下UGUI中进入游戏和退出游戏的逻辑代码的两种实现方式,方便以后查阅,以后如果有其他的方法也会随时更新(Unity版本为2021) 首先是在UI的Image(背景图)上挂载脚本 代码如下 两种方法各有各的好。方法一代码量少但项目大的时候管理比较麻烦;方法

    2024年02月11日
    浏览(38)
  • 【Python】实现一个鼠标连击器,每秒点击1000次

    鼠标连击是指在很短的时间内多次点击鼠标按钮,通常是鼠标左键。当触发鼠标连击时,鼠标按钮会迅速按下和释放多次,产生连续的点击效果。 在这里鼠标连击的主要用途是: 帮助我们进行鼠标点击,疯狂连击; 例如在射击游戏中连续开火,如果点击就可以攻击怪物,那

    2024年02月12日
    浏览(24)
  • QT中实现折叠式按钮

    效果中标签我是用的竖线图片,可以自己搜索一些美观的折叠式按钮图片放上去

    2024年02月16日
    浏览(28)
  • Unity点击按钮实现音频暂停和播放

    省流:完整代码在底部 1、导入命名空间 2、创建变量 3、第一帧开始时调用 4、每帧调用 5、定义方法MusicSwitch 6、创建按钮添加脚本和音频播放器(Audio Source)组件,把按钮拖到脚本上 完整代码

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包