Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六)

Unity3D_楼梯算法 最简单的45°楼梯和任意角度楼梯 45°的楼梯可以先建立一个预制件,然后通过预制件复制元件。 void Start () { for (int i=0; i<10; i++) { GameObject pedal = (GameObject)GameObject.Instantiate (pedalPrefab); pedal.transform.position = 阅读详情

Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六)

 雨松MOMO  【Unity3D研究院之游戏开发】  围观5096次  44条评论  编辑日期:2013-02-19  字体:大 中 小

         按照正常情况游戏中角色在上坡爬坡的时候速度应该减慢,可是角色控制器组件没有帮我们做这个判断,刚好最近工作中需要做这个功能,我就用勾股定理的法则来解决这个问题。如下图所示,当角色在爬坡的时候,角色控制器默认行走的距离就是 “C” 。但是如果行走的距离是“C” 你会发现上坡的速度太快了。这里我们需要计算”b”,让角色在上坡时候一次移动的距离是”b”这样移动就很正常了。

         按照勾股定理的法则, c二次方 = a二次方 + b二次方。已知 c  和 a 我们求的b的距离即可。

Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六) - 雨松MOMO程序研究院 - 1

 

第一步:主角目前所在地形的3D坐标,以及主角面朝方向行走“一段距离”后的3D坐标。 “一段距离” 我这里使用他的行走速度也就是1秒行走的长度。

第二步:把部分代码添加入角色控制器组件。

默认角色控制器行走是走路,简单改一下让他跑步。找到UpdateSmoothedMovementDirection ()方法,加入“|isMoving” 这个判断条件。

 然后找到Update()方法,(C#和js都可以编译通过下面这段代码)

直接运行游戏,你会发现当你在爬坡的时候主角的移动速度会减少,下坡与平地的时候移动速度正常。

另外还有一个地方需要注意下。 使用角色控制器时如果你的坡度角度过于大,你会发现你的主角无法继续爬坡。如下图所示,默认坡度角度为45。如果你需要爬坡更高的角度,直接修改Slope Limit数值即可。

Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六) - 雨松MOMO程序研究院 - 2

 

当然代码中我们也可以控制角色是否可以继续爬坡,根据上述代码两点Y坐标的插值也可以判断。

接着,如果你的项目中没有使用地形元素,而是用美术建模形成的地形话,那么就需要通过射线来取得“地形”上的两个点。如下图所示。

白色射线:得到主角面朝方向一步以后的地形坐标。

蓝色线段:主角移动的起点和终点的线段。

红色射线:处理摄像机(与本章无关)

 

Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六) - 雨松MOMO程序研究院 - 3

 

 在地形之上,我们使用下面这个方法得到地形的高度。

如果项目中的地形是美术做的话,需要用射线的方式来计算。代码比较简单我就不用注释了, 就是上图中的那个白色射线,从天上射向地面。参数是模型面前下一步的将要行走的坐标,然后通过射线换算成实际Y轴高度。

 剩下的地方就和上面的代码差不多了。如果你的项目中没有使用角色控制器,用别的方式来实现移动效果,也可以使用这样的方法,总是就是勾股定理了。

最后是本文的内容的下载地址,这样看起来原理就清晰很多。欢迎留言给我,大家互相学习与进步,哇咔咔。

http://vdisk.weibo.com/s/r1xrb

MOMO与MO嫂提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

【Unity每日一记】角色控制器Character Contorller 角色控制器Character Contorller 阅读详情

相关推荐

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析

本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。

weixin_30919429的博客 127

Unity Rigidbody实现爬坡功能

通过Rigidbody组件实现人物的爬坡功能

当代野生程序猿 5787

arcgis插件 批量出图 按地块批量出图工具(动态文本、动态节点坐标表)

arcgis插件 批量出图 按地块批量出图工具。

坐听风雨 7060

Unity 对角色上坡的研究

但目前来看CC仍存在不少问题,例如上坡时X轴不减速、Slope Limit对胶囊体不起作用、丢失精度导致isGrounded反复跳动等,因此我采用了射线的方案来解决这些问题。即是说,X轴其实是经历过两轮减速的,而CC默认是不进行减速,直接套用就会显得很违和。这时就需要考虑重力势能了,根据公式mgh=1/2mv2 可知: Δv=√(2gΔh),每帧发生位移后减去一定的速度。因此可以加入射线检测,测算出下一个落点和当前点位的坡角,然后将X轴速度分解成两个分速度即可。在搭建完成后,还需要设置角色与其交互的逻辑。

qq_59141650的博客 1457

双目视觉实战:用Bouguet算法实现极线校正的完整代码解析

本文详细解析了Bouguet算法在双目视觉极线校正中的完整实现流程与性能调优技巧。通过旋转平分策略和基线对齐,Bouguet方法显著降低图像畸变并提升匹配精度,相比传统Hartley校正法平均重投影误差降低53%。文章涵盖从相机标定到OpenCV实战的全过程,并分享工业级调参策略,帮助开发者实现高精度立体视觉系统。

f9g0h的博客 263

低成本主从机械臂系统构建:6D位姿数据采集与VLA模型训练实战

本文详细介绍了如何构建低成本主从机械臂系统,实现高精度6D位姿数据采集与VLA模型训练。通过300美元级别的硬件组合,系统达到±1mm位置精度和≤0.5°姿态误差,满足Vision-Language-Action模型的多模态训练需求。文章涵盖硬件选型、数据采集技巧、模型训练实战经验,为机器人研究提供经济高效的解决方案。

r7s8t的博客 265

Unity 人物上坡贴地移动

void Update() { Vector3 newup = transform.position; RaycastHit hit; if (Physics.Raycast(transform.position,Vector3.down,out hit)) { newup.y = (hit.point + Vector3.up * 2.0f).y; destUp = hit.normal; } trans.

LuffyZ的博客 4937

FortiGate-60E防火墙忘记密码?用Console线+TFTP重装固件v7.0.9全流程

本文详细介绍了当FortiGate-60E防火墙忘记密码且物理重置无效时,如何通过Console线连接并利用TFTP服务器重装固件(如v7.0.9)的全流程。从恢复原理、工具准备、网络配置到逐步执行命令,提供了完整的实战指南,帮助管理员彻底恢复设备出厂设置并重置密码。

snow3的博客 332

Unity检测地面坡度丨人物上坡检测

此功能为,人物在爬坡等功能时可以检测地面坡度从而完成向某个方向给力或者完成其他操作。

weixin_42746271的博客 1312

delphi 调用deepseek r1 api 并流式返回结果

摘要:本文展示了一个使用Delphi调用DeepSeek API的代码示例,包含两种调用方式:一次性获取结果和流式返回结果。代码实现了完整的API请求处理,包括HTTP客户端设置、JSON数据处理和UI界面交互。其中流式调用通过TStreamReader处理服务器发送事件(SSE),实时更新到TRichEdit控件并保持滚动条位置。文章还提到界面美化优化,为Delphi开发者提供了调用AI服务的实用参考方案。(150字)

全粘工程师 490

分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

🔥 分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

XiaoqiangClub的博客 477

Unity3D中上斜坡会下滑的问题

最近做HTC的项目,发现通过touchpad的触碰来移动物体会导致一个问题,斜坡角度比较大的时候,由于刚体的重力分力会导致运动区域下滑。 其实解决的方法很简单,就是判断刚体本身是否与地面相接触,如果地面与地面接触,就将刚体的使用重力取消,如果处于悬空状态,就重新使用重力效果,同时需要限制刚体的速度。 具体代码如下: void OnCollisionStay(Collision other)

lichoueve的博客 9886

DOTS 性能基石:为什么传统 Unity 代码难以满足现代游戏需求?(DOTS 系列教程 · 第1篇)

本文探讨了Unity游戏开发中的性能优化问题,指出性能问题不应在最后才考虑,而应贯穿整个开发过程。文章分析了性能问题的三大表现(渲染开销、物理模拟、游戏逻辑),并解释了依赖硬件升级的不可行性。重点剖析了传统Unity代码性能低下的六大根源:垃圾回收卡顿、编译器优化不足、多核利用不足、数据结构和代码缓存不友好、过度抽象等问题。最后指出Unity项目中常见的反模式,如主线程垄断、内存碎片化等,为后续学习DOTS高性能架构解决方案奠定基础。

分享知识,拥抱变化 150

Unity3D技术之利用角色控制器实现爬坡减速效果

欢迎来到狗刨学习网,这里有很多U3D资源、U3D培训视频、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌           按照正常情况游戏中角色在上坡爬坡的时候速度应该减慢,可是角色控制器组件没有帮我们做这个判断,刚好最近工作中需要做这个功能,我就用勾股定理的法则来 解决这个问题。如下图所示,当角色在爬坡的时候,角色控制器默认行走的距离就是 “C” 。但

Qst_Baron的专栏 2249

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

物体方位判断以及上坡/下坡道路坡度计算

物体方位计算: 如跑酷游戏,主角在任意方向的曲线跑道上移动,通常会限定主角在水平方向只能在跑道中心左右一定范围内移动,避免主角移出跑道。这时就需要计算主角此时的位置是在跑道中心点的左侧还是右侧,以及距离中心点的距离,如果超过了左右两侧的临界点就不再向对应的方向移动。 离跑道中心的距离就可以这样计算: float offsetX = Vector3.Dot(pathNormal, transform.position - pathPoint); 其中pathPoint是此时主角距离跑道路径最近的点,

eFunTech 3127

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Unity通过刚体组件和C#脚本,施加力实现物体下落并滚离平面 及相机跟随物体

Unity通过刚体组件和C#脚本,施加力实现物体下落并滚离平面 及相机跟随物体

踩的坑越多,经验越多 3534

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Unity 3D - 小技巧 ( 三 )

Unity 3D - 小技巧 ( 三 ) :修改默认代码 :减少APK包大小 : 如果发现Unity打包安卓平台生成的apk体积过大,可以找到PlayerSettings中的安卓平台,默认情况下Device Filter设定为FAT(ARMv7+x86),表示两种安卓架构平台。如果只需发布到一种架构则单独选择对应的一种即可。这样可以有效减小包体积。 使物体完美贴合地面 : 如果喜欢物体可以紧贴地面

Yu 1491

Unity CharacterController控制人物移动(包括重力实现)

在使用CharacterController组件时,人物移动一般有两种方式,一种是无重力移动–>SimpleMove,一种是有重力移动–>Move。而使用有重力移动时,又会出现人在下楼梯时无法贴合地面,从而造成飞天效果,最终导致方向键控制混乱的现象。...

qq_43036676的博客 1万+

unity,角色控制器详解

角色控制器是Unity中的一种特殊组件,它可以用于控制游戏中的角色。角色控制器提供了一些有用的功能,例如移动、跳跃、重力和碰撞检测等,可以帮助您实现角色的基本控制。与其他类型的控制器不同,角色控制器使用胶囊体碰撞检测来检测角色与其他物体之间的碰撞。这种碰撞检测方法可以确保角色在运动时保持稳定,并且可以避免一些常见的碰撞问题,例如卡住或穿过物体。使用角色控制器可以使角色的控制变得更加简单和直观。您可以使用角色控制器提供的函数来控制角色的移动、跳跃和旋转等,而不必手动编写复杂的代码。

qq_20179331的博客 1571

Unity3D自动寻路系统Navigation(三)之人物上下斜坡设置

**Unity3D自动寻路系统Navigation(三)之人物上下斜坡设置** 由于最近在一个VR项目中用到寻路系统,当然这也是开发游戏、VR等项目中必须熟悉的。但是您有没有用寻路系统来设置过上下斜坡,今天就和大家一起来探讨一下遇到的问题和提供一些解决方案。废话不多说,直接上干货。

qq_27678295的博客 9173

Unity内置寻路算法-导航网格

寻路算法非常重要,因为绝大部分的游戏都需要用到,比如RPG游戏中的任务系统,任务点击任务后需要自动寻路到目标位置,再比如Moba游戏,我们点击地图,英雄就会自动寻路到点击的地方。这就是寻路算法的作用了。那么怎么实现寻路算法呢?现在比较流行的就有A*。其实unity有内置的寻路算法,那就是导航网格组件。有了它,我们就可以进行寻路了。 给大家推荐一个unity学习+交流705182843 首先我...

voidinit的专栏 1609

【Unity 3D学习】键盘控制人物在场景中移动

一、第一种情况,键盘左右键控制人物旋转,让人物可以面向四方,然后上下键控制移动。 public float speed = 3.0F; public float rotateSpeed = 3.0F; CharacterController controller; void Start () { controller = GetComponent(); } void Update()

既然选择了远方,便只顾风雨兼程! 1万+

unity用方向键来控制角色上楼梯

自动寻路可以实现角色自动到任意的地方,也可以上楼,可我希望通过方向键来实现角色的移动和上楼梯。可是不同的楼梯有不同的台阶高度,若给他设定一个固定的值。那么使用起来不方便,而且在判断上楼还是下楼时比较难,如何让角色在y轴上的移动随着下一步的高度来改变呢? 若是在复杂的地形中,或许我们可以用Terrain.activeTerrain.SampleHeight(transform.position);

ayouayouwei 1万+

【Unity3D】自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃

@toc 参考文章:列表 Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh) unity3D——自带寻路Navmesh入门教程(二) Unity3D自动寻路系统Navigation(三)之人物上下斜坡设置 Unity手游之路<八>自动寻路Navmesh之入门 Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡 NavMesh Agent 一、Navigation面板 这里写图片描述 Navigation面板中包括几个模

chqj_163的专栏 7502
上一篇: Unity3D开发:在Unity3D中创建一个山势地形图
下一篇: unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值