Unity之CharacterController2D学习笔记(1)——基础使用

在很多游戏类型中,玩家角色对物理行为的处理往往和场景中其它物体的行为有比较大的区别。比如角色可能会以90多公里的时速狂奔,同时一次跳跃能跳10多米高,与此同时却几乎不会有任何惯性。同时角色在正常情况下当头部碰到障碍物的时候,应该只是会被阻挡前进,而不应该直接仰面摔倒。这些特殊的需求注定不应该以普通的碰撞区+刚体的形式来实现,所以unity为我们准备了名叫“角色控制器”(CharacterController)的组件。然而到目前为止(5.5unity中只为3D物理提供了这个组件,针对2D游戏则需要我们自己实现一套类似的机制。

 

基本原理就是不用自带的那些物理判断,而使用射线检测等方法来判断前进方向上是否有障碍物等并修改移动的方向和距离,从而达到所需的效果。起初博主自己实现了一个有基础功能的版本,后来在github上发现了一个别人实现好的功能更全面的版本,所以在这里分享出来。


地址:https://github.com/prime31/CharacterController2D


博主使用这个控制器的主要目的是为了做一款平台动作类游戏,因此也会着重说一些制作使用途中遇到的问题以及解决方法。


先看一下组件挂载在GameObject上之后可以设定的属性:



可以看到这里和CharacterController一样也有Skin Width这个选项,这个选项会影响角色控制器检测碰撞时的射线,具体的实际影响会在之后代码的部分再详细说。

然后接下来是设定三种射线检测时的层级:不可穿过的墙壁、地面;触发事件而不会影响物理控制的触发区和可以单向穿过的平台。

再往下是上坡角度的限制、跳跃阈值以及在坡道上运动时由于坡度对速度造成的影响的曲线。跳跃阈值这里博主在自己的项目里并没有使用到,不过在作者的demo里面是有用到的。

最后就是水平方向和垂直方向分别的射线数量。射线数量越多,相对就会检测的越精确,不过也需要花费更多的计算资源。


需要注意的是,这个角色控制器会要求挂载的对象上同时也具备刚体(Rigidbody2D)及矩形碰撞区(BoxCollider2D)两个组件,其中刚体是触发碰撞必须的组件,而矩形碰撞区虽然必须挂载,但并不意味着就一定要使用它,可以在代码中随时进行切换,只不过如果在角色已经落地了的情况下,直接切换到一个更大的碰撞区的话,是有可能会导致角色卡住的(碰撞区底部陷入地面)



基本上最基础的使用就是调用move(Vector3 deltaMovement)这个方法。这个方法的意义是将控制器向deltaMovement向量移动,若其中有任何被标记过的不可穿过的碰撞区则都会阻碍这次移动。



有一个问题需要注意,就是移动的时候,若需要获取到是否在某个方向(上下左右)接触到了障碍物的话,一定要使传入的deltaMovement向量中包含着向障碍物方向移动的分量,否则将会导致跳过该方向的碰撞检测从而无法正确得知你所需要的信息(比如明明就在地面上,isGrounded属性却一直是false的话,很有可能是因为你的移动分量里没有向地面的分量,而碰撞区本身又有一点点倾斜,导致出现了检测错误)


下一篇将会更详细的说一下代码的部分。

转载于:https://www.cnblogs.com/nmsuper86/p/6560977.html

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

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

相关文章

前端开发中如何将文件夹中的图片变为背景图_Web中的图像技术全面总结,长文干货!...

前端开发人员在构建网站时需要做出的决定之一就是添加图片的技术。它可以是HTML ,也可以是通过CSS背景生成的图片,也可以是SVG 。选择正确的技术很重要,并且可以在性能和可访问性方面发挥巨大作用。最简单的情况下,图片元素必须包…

【Pytorch神经网络实战案例】33 使用BERT模型实现完形填空任务

1 案例描述 案例:加载Transformers库中的BERT模型,并用它实现完形填空任务,即预测一个句子中缺失的单词。 2 代码实现:使用BERT模型实现完形填空任务 2.1 代码实现:载入词表,并对输入的文本进行分词转化--…

container_of宏

1.container_of宏 1> Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 2>接口: container_of(ptr, type, …

c++ string 删除字符_字符串操作的全面总结

来自公众号:C语言与cpp编程字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃。本文总结了一些构建string对象方法、修改string对象的方法、string类型的操作函数、string…

【Pytorch神经网络理论篇】 40 Transformers中的词表工具Tokenizer

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

warning: function declaration isn’t a prototype(函数声明不是原型)的解决办法

linux驱动中定义一个无参的函数int probe_num(){....}警告:函数声明不是一个原型 [-Wstrict-prototypes]应对方法:改成int probe_num( void){....}警告消失 http://blog.csdn.net/dumgeewang/article/details/7410477

【Pytorch神经网络实战案例】34 使用GPT-2模型实现句子补全功能(手动加载)

1 GPT-2 模型结构 GPT-2的整体结构如下图,GPT-2是以Transformer为基础构建的,使用字节对编码的方法进行数据预处理,通过预测下一个词任务进行预训练的语言模型。 1.1 GPT-2 功能简介 GPT-2 就是一个语言模型,能够根据上文预测下…

电容式传感器位移性能试验报告_一文读懂什么是接近传感器?

点击上方蓝字 记得关注我们哦!接近传感器是一种非接触式传感器,当目标进入传感器的视野时,它会检测到物体(通常称为“目标”)的存在。取决于接近传感器的类型,传感器可以利用声音,光,红外辐射(IR)或电磁场来…

[dts]DTS实例分析

2. 通常会碰到的实际问题 到此,问题出现了: 1. 当写一个按键驱动,应该如何在*.dts或者*.dtsi中操作? 2. 当在串口driver中需要使用到某个pin脚作为普通输出IO,该如何操作? 3. 当在串口driver中需要使用某个muxpin脚作…

【解决】YOLOv6.1安装requirements.txt报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x84

案例描述: 使用YOLOV5时,报错解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x84 in position 285: illegal multibyte sequence 解决方案: 在C:\ProgramData\Anaconda3\lib\distutils\dist.py"文件搜索read 将parser.read(filenam…

bp 神经网络 优点 不足_深度学习之BP神经网络--Stata和R同步实现(附Stata数据和代码)

说明:本文原发于“计量经济圈”公众号,在此仅展示Stata的部分。R部分请移步至本人主页的“R语言与机器学习--经济学视角”专栏,或点击下方链接卡跳转。盲区行者:深度学习之BP神经网络--Stata和R同步实现(附R数据和代码…

高通平台中gpio简单操作和调试

做底层驱动免不了gpio打交道,所以对其操作和调试进行了一下简单的梳理 一、gpio的调试方法 在Linux下,通过sysfs,获取gpio状态,也可以操作gpio。 1、获取gpio状态 cd /sys/kernel/debug/ cat gpio 2、操作gpio(以gpi…

Win10系统下使用anaconda在虚拟环境下安装CUDA及CUDNN

前排预警:不要挂梯子!!!!!使用清华源就行不然报错!!!! 解决check_hostname requires server_hostname_orange_の_呜的博客-CSDN博客错误描述在GitHub下载代码文件后使用pip install -r requirement.txt下载依赖包时出…

jlink问题

现在淘宝上买到的JLINK都是盗版的,用着用着的时候就会遇到各种异常问题, 这里有一个方法来修改SN,修改SN后就会变得正常了,亲测有效 两种固件: V*_ID-自定义.* 是出厂设置,烧入后用jlink.exe连接上S/N会显示-1. 此时可以根据自己的…

将XML格式转化为YOLO需要的txt格式(代码)

1、XML的格式 <annotation><folder>cr</folder><filename>crazing_2.jpg</filename><source><database>NEU-DET</database></source><size><width>200</width><height>200</height><…

js 点击button切换颜色_ThingJS 和three.js开发示例对比,让开发早点下班回家!3D 可视化...

ThingJS 3D框架简化了开发工作&#xff0c;面向对象和模块化的特点使得网页代码更加易于管理和维护&#xff0c;并且提供近200个官方示例&#xff0c;直接获取API能力&#xff0c;不需要基于3D概念进行开发&#xff0c;适合3D商业项目快速生成&#xff01;距离您的业务仅一层之…

变量命名

列举一下我自己的一些写法 local_int_loop_count global_int_data_count local_bool_plug_insert_flag global_bool_ble_connect_flag函数命名 get_tick_number set_tick_number为了代码清晰易懂&#xff0c;通常变量名采用一些著名的命名规则&#xff0c;主要有Camel标记法&am…

VSCode使用技巧——Ctrl+鼠标滚轮键使字体进行缩放

点击VSCode左下角的齿轮&#xff0c;进入设置 进入Extensions——》JSON——》Edit in settings.json 在json当中添加如下&#xff1a; "editor.mouseWheelZoom": true,

python 交互式可视化库_Python 交互式可视化库

Python 交互式可视化库 所属分类&#xff1a;中间件编程 开发工具&#xff1a;Python 文件大小&#xff1a;12843KB 下载次数&#xff1a;1 上传日期&#xff1a;2018-12-06 18:40:56 上 传 者&#xff1a;孤独的老张 说明&#xff1a; 一个 Python 交互式可视化库&#xff0c;…

OpenCV各版本差异与演化,从1.x到4.0

最近因项目需要&#xff0c;得把OpenCV捡起来&#xff0c;登录OpenCV官网&#xff0c;竟然发现release了4.0.0-beata版本&#xff0c;所以借此机会&#xff0c;查阅资料&#xff0c;了解下OpenCV各版本的差异及其演化过程&#xff0c;形成了以下几点认识&#xff1a; 新版本的…