Unity记录2.1-动作-多段跳、蹬墙跳、墙体滑落

2023-11-02 04:30

本文主要是介绍Unity记录2.1-动作-多段跳、蹬墙跳、墙体滑落,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章首发及后续更新:https://mwhls.top/4450.html,无图/无目录/格式错误/更多相关请至首发页查看。
新的更新内容请到mwhls.top查看。
欢迎提出任何疑问及批评,非常感谢!

汇总:Unity 记录

摘要:实现跳跃、蹬墙跳与贴墙下落,重写了项目。

参考课程:超新Unity课程用Unity+C#制作2D游戏快速入门到实战课程2D实战课程

目录
原型碰撞箱 2023/02/13
跳跃 – 2023/02/13
蹬墙跳与贴墙下落 – 2023/02/14 – 2023/02/15
项目重写 – 2023/02/15
原型碰撞箱 2023/02/13
  • 碰撞箱有圆形的,设置后左右移动会令物体旋转,为刚体开启轴的旋转限制以解决。
跳跃 – 2023/02/13
  • 教程里面是加一个脚底的圆形判定点来实现,但是我的对象是圆的,我希望它下半身碰到任何可接触物块时都能跳跃,那这个圆形判断就不太好。
    • 比如卡在缝里,下半身肯定有接触才能卡,但是因为圆形碰撞太小,导致没判断接地,太大的话,腾空就能跳跃。
  • 今天改了几个小时的跳跃,其中一个版本效果很好,可以在被卡着的缝里跳出,且不会在墙壁上起跳。
    • 加三个碰撞体,中间 middle 一个扁的长方体,下方 lower 一个圆形,最底 foot 一个窄一点的长方体。
    • 所有跳跃都需要lower触碰时才能起跳。
    • middle有接触时表示碰到墙,不允许起跳,除非 foot 也有接触。
    • 使用圆形的 lower 避免太远就可起跳,违和。
    • 但还有一个问题,他可以卡在墙上,不是跳跃的问题,是摩擦力的问题。
  • 然后我把摩擦力关了,发现能直接从缝里移动出来,跳跃可以简略
    • 所以我把我几个小时的成果删了,把 foot 换成大约占 0.5 宽度的 edge,edge 由六个点组成,刚好不会离碰撞体太远,也不会因为速度太快导致撞墙可以跳跃。
    • 简化掉不必要的东西,避免性能浪费。

Unity_05_BetterJump.png

蹬墙跳与贴墙下落 – 2023/02/14 – 2023/02/15
  • 实现中途发现脚本太多不好找,于是对项目重写了,介绍下最终效果。
  • 贴墙下落比较简单,不多提。
  • 可以多段跳,多段蹬墙跳,在墙上只蹬墙跳,在地上只跳跃。
  • 不按移动键时可以在墙上使用无水平速度的蹬墙跳,可以在墙壁上获得最高跳跃,不会因为水平速度离开墙壁。
    • 换句话说算是个跨越高墙的小技巧。
  • 跳跃有冷却,用协程实现,涉及到下面更复杂的判定。
项目重写 – 2023/02/15
  • 这次又重写了下,第一次是把命名规范了下,第二次,也就是这次,是把行为归类,并且用了更复杂的判定。
  • 行为归类:
    • 之前是统一用 PlayerBase 来实现移动,动画,攻击。
    • 现在移动,攻击,动画是各自一个类。
    • PlayerBase 只存储角色信息,比如哪些技能可用,剩余次数。
  • 更复杂的判定:
    • 现在所有运动都有新的判定:可用、剩余次数、执行顺序。
  • 一点吐槽:
    • 这几天不务正业了,就早上搞学术,下午晚上都在搞 Unity,明天要注意一下。
    • 但是第三集就是动画切换了,看起来我能开始画动画了!
// 分享一下重写后的跳跃public void action_jump(bool keydown_jump, float input_x){// condictionif (!keydown_jump) return;// jump wallelse if (check_jump_wall()){// actionjump_wall(input_x);// animation}// jumpif (check_jump()) {// actionjump();// animation}}
bool check_jump(){// skill enable?if (!player_base.enableSkill["jump"]) return false;// touch ground?bool isGrounded = check_touch(player_base.transform_dict["FootTouch"].GetComponent<EdgeCollider2D>());if (isGrounded) player_base.recoverSkill("jump", "jump_wall");// times enough?if (!player_base.consume_skill_times("jump")) return false;return true;
}public void jump(){// cooldownIEnumerator coroutine = player_base.reverse_skill(0.25f, "jump_wall", "jump");StartCoroutine(coroutine);// actionrb.velocity = new Vector2(rb.velocity.x, speed_jump_final);
}bool check_jump_wall(){// skill enable?if (!player_base.enableSkill["jump_wall"]) return false;// touch ground?bool isGrounded = check_touch(player_base.transform_dict["FootTouch"].GetComponent<EdgeCollider2D>());if (isGrounded) {player_base.recoverSkill("jump", "jump_wall");return false;}// touch wall?bool isStickWall = check_touch(player_base.transform_dict["MiddleTouch"].GetComponent<EdgeCollider2D>());if (!isStickWall) return false;// times enough?if (!player_base.consume_skill_times("jump_wall")) return false;return true;
}public void jump_wall(float input_x){// cooldownIEnumerator coroutine = player_base.reverse_skill(0.25f, "move", "jump_wall", "jump");StartCoroutine(coroutine);// actionrb.velocity = new Vector2(rb.velocity.x, speed_jump_wall_final);move(-input_x);
}</code></pre>

这篇关于Unity记录2.1-动作-多段跳、蹬墙跳、墙体滑落的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328112

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

【2.1 深度学习中的感知机是什么】

2.1 深度学习中的感知机是什么 深度学习是机器学习的一个分支,它模拟人脑的工作方式来处理数据,尤其是通过神经网络的结构来自动提取数据的特征并进行分类、回归或其他复杂的任务。在深度学习的早期发展中,许多基础概念和模型为后续的复杂网络奠定了基础。其中,**感知机(Perceptron)**是一个非常重要的基础模型,它实际上是神经网络和深度学习的前身之一。 感知机的基本概念 感知机是一种二分

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

Linux常用工具与命令日常记录(长期更新)

Linux常用工具与命令日常记录(长期更新) 目录 1.本地复制到远程2.Linux压缩拆包与解压3.生成随机密码4.ubuntu默认Python版本设置5.计算当前文件夹中文件数量6.windows中编写shell脚本,在Linux运行出错7.history 历史命令显示时间用户8.Ubuntu18.04设置源、网卡9.Ubuntu18.04设置网卡10.Ubuntu:自定义开