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

3D赛车游戏开发 做了几个赛车游戏后,随便写一点。 3D赛车游戏需要的内容: 赛车模型 。 赛道模型。 物理引擎、碰撞检测。 控制代码。 实现功能: (1)、程序中要加入胜、负的逻辑,这样才可以称之为游戏。为赛车游戏的加入终点,先到终点的赛车为胜者。   (2)、程序中要加入赛车爬坡的逻辑,根据地形的高低来决定赛车的高度。这样游戏才可以更逼真。   (3)、程序中要加入光照的逻辑。 阅读详情

 欢迎来到狗刨学习网,这里有很多U3D资源、U3D培训视频、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌 

 

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

 

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

 

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

 

        第二步:把部分代码添加入角色控制器组件。默认角色控制器行走是走路,简单改一下让他跑步。找UpdateSmoothedMovementDirection ()方法,加入“|isMoving” 这个判断条件。 

if (Input.GetKey (KeyCode.LeftShift) | Input.GetKey (KeyCode.RightShift) | isMoving) 

 

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

// Apply jumping logic 

ApplyJumping (); 

//-------------开始插入代码 ------------- 

//当主角处于移动状态时开始计算主角目前坐标以及1秒后坐标 

if(IsMoving()) 

{ 

//得到主角行走1秒后所在位置地形的坐标 

var newPos = transform.position + (transform.rotation * Vector3.forward * moveSpeed); 

newPos.y = Terrain.activeTerrain.SampleHeight(newPos); 

//得到主角当前位置所在地形的坐标 

var heropos = transform.position; 

heropos.y = Terrain.activeTerrain.SampleHeight(transform.position); 

//绘制一条Debug的线段,在编辑器中看的更清楚。 

Debug.DrawLine(heropos,newPos,Color.red); 

//斜边的长度 

var c = moveSpeed; 

//短直角边的长度 

var b = newPos.y - heropos.y; 

//b >0 标示主角在爬坡 b < 0 表示主角在下坡 

if(b > 0) 

{ 

// 根据公式计算 a = 根号下 c二次方 -  b二次方 

var a = Mathf.Sqrt(Mathf.Pow(c,2) - Mathf.Pow(b,2)); 

moveSpeed = a; 

} 

} 

//-------------结束插入代码 ------------- 

// Calculate actual motion 

Vector3 movement = moveDirection * moveSpeed + new Vector3 (0, verticalSpeed, 0) + inAirVelocity; 

movement *= Time.deltaTime; 

 

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

 

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

 

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

unity角色控制器简介 Character Controller 用于应用到会动的游戏对象上,添加角色控制器后,会自动添加一个胶囊碰撞体 主要参数说明: Slope Limit:坡度限制 Step Offset:台阶高度 -Skin Width:皮肤厚度,控制双方渗入的深度,一般是Radius值的10% Min Move Distance:最小移动距离,大多数情况下设置为0 Center、 Radius、 Height:胶囊碰撞体的中心、半径、高度 移动的方法: move:指定一个向量,完成移动 S 阅读详情

相关推荐

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

Unity3D 角色控制器 Character Controller

添加组件 角色控制器组件介绍 【Slope Limite】爬坡角度限制(如图限制爬坡角度为10度,超过10度的斜坡无法前进) 【Step Offset】脚步长度限制 【Skin Width】和胶囊体相关,建议不用调0.001 【Min Move Distance】两个物体间的最小距离,到这个距离后,物体就不在前进 【Center】胶囊体的位置(相对物体对象的位置) 【Radius】胶囊体周长...

喵毛的博客 4252

详解Unity中的角色控制器

如何让玩家所操纵的角色动起来,这在Unity中很容易实现,但是如何确保玩家所操作的角色不会产生一些非常违反物理常识的情况?而这就需要进行大量的检测,已确保玩家所操纵的角色正常。所幸Unity为我们提供了这样的一个组件——角色控制器(Character Controller)。下面将介绍该组件的基本参数以及使用方法。......

梦小天幼的博客 1万+

Unity 2D角色控制器(横板滚轴)

unity自带的2D刚体在坡上会往下滑。而且也是会有可能穿墙,或碰撞到其他物体时鬼畜抖动。 设计思路 1、利用射线进行判断碰撞防止穿墙: 原理传送门 2、在地面时往地面发射两条射线,获得的两个点,两个点形成的线,这个线是角色的移动向量。 下面是一个自定义的一个横板2D角色控制器,包含有简单的移动和跳跃。 代码: using System.Collections; using Sys...

qq_36633019的博客 1699

Unity3D导航 爬楼梯、跳楼、分路线前进

1.爬楼梯 (1)4个cube 、玩家capsule,1个plane (2)为玩家添加组件 (3)将所有对象 ,都设置为静态 (4) 执行window——》AI——》Navigation 设置导航 设置高度 最后点击Bake 进行烘焙 (5)给玩家添加脚本 using UnityEngaine.AI; public class MouseMoveRay : MonoBehaviour...

qq_46079718的博客 3199

【Unity实战100例】Unity2D人物控制器,控制2D玩家移动跳跃,四方向和水平方向

Unity控制2D玩家移动跳跃,四方向和水平方向

纯技术流日常开发商业开发记录总结等 1857

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

Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六)  雨松MOMO 【Unity3D研究院之游戏开发】 围观5096次 44条评论 编辑日期:2013-02-19 字体:大 中 小          按照正常情况游戏中角色在上坡爬坡的时候速度应该减慢,可是角色控制器组件没有帮我们做这个判断,刚好最近工作中需要做这个功能,我就用勾股定理的法则来解决这个

linuxheik的专栏 3825

【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用(2024/12/12补充)

其实一开始我是不打算写的,我感觉这种简单的功能,网上随便一搜一大堆,但是我发现网上很多都是复制粘贴,要么没有实操过,要么就是功能不全,或者毫无解释的把代码丢出来,我自以为简单的3D角色控制,我整整花了3-4天才研究明白(虽然每天只花几个小时),下面是记录我的一些思路过程,希望对你有帮助。【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇1。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3万+

unity3d鸿蒙系统支持,Unity3D之处理角色控制器实现上坡爬坡减速

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

weixin_39677027的博客 2425

VCSA 上的 vmware-vpxd 服务失败,Web端提示503 服务不可用 (503 Service Unavailable)

昨晚VCSA碰到一个很诡异的问题: 使用 vSphere Web Client 连接到 vCenter Server Appliance时失败,提示: 503 服务不可用 (503 Service Unavailable) 无法连接端点 (Failed to connect to endpoint):[N7Vmacore4Http20NamedPipeServiceSpecE:0x00007f975808ee30] _serverNamespace = / action = Allow _pipeNam

徐华的博客 2万+

超详细版!Obsidian+Claude+Skills+云同步,打造智能 AI 知识库

本文介绍如何搭建高效的AI知识管理系统,将Obsidian笔记工具与ClaudeAI助手深度整合。通过ClaudeCode安装配置、ObsidianSkills插件添加和坚果云同步设置,实现本地存储安全性与云端便捷性的完美结合。该系统支持智能笔记整理、知识图谱可视化、智能搜索问答和内容创作辅助等功能,使静态笔记转变为能自动分析关联、处理复杂结构的"活"知识库。详细步骤包括工具准备、环境配置、插件安装和云同步设置

2301_79998006的博客 1080

Unity3D车辆AI:基于NavMesh与物理引擎的自动寻路与动态避障实战

在游戏开发与仿真领域,路径规划与动态避障是构建智能移动体的核心技术。其原理通常涉及全局路径搜索算法与本地行为控制的结合,例如A*或导航网格(NavMesh)用于计算最优路线,而转向与速度控制则依赖物理引擎实现真实交互。这项技术的价值在于为虚拟环境中的自主实体赋予“思考”与“反应”能力,是实现自动驾驶仿真、智能NPC以及物流AGV等应用场景的基石。本文聚焦于Unity3D引擎,针对车辆这一特定移动体,深入探讨如何超越基础NavMeshAgent的局限,通过一种融合全局路径规划、前瞻点转向控制、WheelCol

weixin_33860553的博客 374

开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述

综上,大多数工作均基于CLIP预训练的图像编码器和文本编码器。GlIP为解决目标检测任务提供了先例,后续很多工作常与目前较为广泛使用的目标检测网络结构相结合,从而构建新的开放词汇目标检测器。如ViLD基于Mask R-CNN、RegionCLIP基于R-CNN、VLDet和BARON基于Faster R-CNN。更具有创新性的工作是Detic,提出了使用图像分类的数据集来对目标检测器的分类头进行训练。

yangsn0719的博客 4402

Unity 对角色上坡的研究

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

qq_59141650的博客 1457

从Applied Intelligence被拒到The Visual Computer录用:我的计算机视觉论文投稿时间线全记录(含详细修改意见)

本文详细记录了作者从Applied Intelligence被拒到The Visual Computer成功发表计算机视觉论文的全过程,重点分享了如何将模糊的拒稿理由转化为具体改进方案。文章包含技术改进细节、写作调整策略以及期刊选择经验,为计算机视觉领域的研究者提供了实用的投稿指南。

weixin_30872499的博客 467

Arduino Uno R3开发板系列学习教程(番外篇:USB驱动安装与疑难排解)

本文详细介绍了Arduino Uno R3开发板USB驱动安装与疑难排解的完整指南,特别针对国产克隆版常见的CH340驱动问题提供解决方案。从识别开发板类型到Windows/Mac系统驱动安装步骤,再到常见问题排查与高级排错技巧,帮助开发者快速解决连接问题,确保程序烧录顺利进行。

weixin_29182481的博客 583

Unity为角色控制器CharacterController添加过高角度斜坡下滑功能

为角色控制器CharacterController添加过高角度坡度下滑功能

Boy1nABox的博客 1168

【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析

BT - OptiAnimX 是一款面向 Unity 的高性能动画优化框架,核心目标是解决多角色动画场景中的性能瓶颈问题。该插件对标《战争机器5》和《巫师3》等 AAA 游戏中的动画优化技术,通过一整套自动化与智能化的优化策略,将动画性能提升与视觉质量控制结合在一起。它适用于从移动端、VR 到高端 PC 的多平台项目,尤其在“多人角色 + 高频动画”的场景中表现突出,例如 MMO、开放世界、动作游戏等。BT - OptiAnimX 本质上是一套“动画性能调度系统”,而不仅仅是优化工具。

2403_88403568的博客 433

untiy 2D角色控制器

这节讲讲类似马里奥,盗贼遗产,这些类似的游戏人物基本的控制方式。这里我用Prime31这个公司的插件改了一个比较小的控制脚本,博客结尾会给大家一份源码,先简单的讲一下2D人物控制器的原理,2D控制器可不像untiy 3D控制器那样,untiy官方帮我们封装了。所以这里就只能自己去写了,先贴出一张图。 图中的场景时源插件中的场景,我就直接拿来用免得自己去摆了,图中有3中不同的障碍物,方块代表玩家,

逗比刘的博客 6216

PCL 读取和保存点云

PCL (Point Cloud Library) 是一个用于处理 3D 点云数据的开源库。在处理点云数据时,常见的任务包括点云的读写和可视化。PCL 提供了强大的 IO 模块来读取和写入各种格式的点云文件,并且提供了可视化模块来对点云进行渲染和显示。点云的读写与显示是很多 3D 数据处理任务的基础步骤,通过这些步骤,可以对点云进行预处理、分析和操作。

纵马踏花向自由 1739

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

unity——使用角色控制器组件+射线移动

首先要导入unity标准资源包Character Controllers 这个标准资源包,为了方便,还添加了两外一个资源包Scripts,后者包含了一些基本的脚本个摄像机脚本。 没错,这次我们要使用其中一个摄像机脚本, 创建一个terrain (地形ller组件(如),创建一个capsule ,并为这个胶囊提添加 CharactContro果没有导入角色标准资源包的话竟不能被添加该组件...

banyao3644的博客 347

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Unity超级角色控制器研究(四)——地形检测

一个地形检测反例 因此我们想知道什么在角色脚底下呢?首先是距离脚下有多远。我们会想知道角色的脚是否贴着地面还是在半空中。我们还会想知道脚下地面具体位置坐标,这对于上一章强调过的钳住地面是很重要的。第三个就是会想知道脚下地形的法线是多少。而最后很有必要知道脚下的GameObject是谁,这使得我们可以为地形添加组件(在超级角色控制器当中,会有SuperCollisionType可以添加到地形当中来描述地形)。 看看之前研究Unity物理API的文章,找到最合适的解决方案是Physics.Raycast。...

wubaohu1314的博客 1566

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[Untiy2D好项目分享]一个好手感的2D控制器

学习目标: 今天同样在b站上看到一个转载视频这个Unity角色控制器是使用自定义的物理组件制作的,并包含一些隐藏的平台游戏技巧,让玩家体验到优秀的操作手感。 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境 掌握 Java 基本语法 掌握条件语句 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 周一至周五晚上 7 点—晚上9点 周六上午 9 点-上午 11 点 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量

dangoxiba的博客 2582

CharacterController爬坡和台阶问题

现在做的一款游戏,需求是不能让角色爬坡,不能让角色登上任何台阶。简单说就是不能离地。然后使用CharacterController就出现怎么设置都不行的尴尬境地(并且充满疑惑)。如图: 爬坡高度Slope Limit 和 台阶高度 Step Offset 都已经设置为0了,可是依旧能上小坡度,小台阶。 想了半天为什么。脑补是这样:胶囊形状的弧度碰撞导致 很可惜,我们不能改变角色控制器...

常城的专栏 3334

unity3d人工智能学习(4)——A*寻路算法(爬梯和跳跃)

A*寻路算法(爬梯和跳跃)简单描述操作过程 参考:https://www.cnblogs.com/wangweixznu/p/5443071.html 简单描述 在上一次上机的基础下继续进行学习。 操作过程 简单构造一个场景,里面包含地面plane,几个高低落差不一样的台阶,楼梯。 ...

weixin_44292962的博客 1943
上一篇: Unity3D技术之光照贴图快速入门详解
下一篇: 摄像机属性及妙用详解
Qst_Baron
博客等级 码龄12年 15粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值