角色控制器 (Character Controller)_charactercontroller-程序员宅基地

技术标签: Unity 3D  

角色控制器 (Character Controller)

一、简介
角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制。如果要创建类人角色,可使用角色控制器 (Character Controller)。这可以是第三人称游戏 (Third Person Platformer) 中的主角色、FPS 射击者或任何敌人角色。

二、基本概念
第三人称游戏中的这些控制器由于无规律可循,所以无法遵守固定的物理规则,例如,让某辆车每小时跑 90 英里,但是它可能会突然停止然后在极小的空间中转弯。此时,就需要由角色控制器 (Character Controller) 进行碰撞检测以确保角色可以沿墙滑动、走上和走下阶梯等。

角色控制器 (Character Controller) 既可以受力的影响,也可以不受力的影响。比如,可以通过脚本对刚体 (Rigidbody) 应用力来推动它们。通常,所有类人角色都使用角色控制器 (Character Controller) 来实现。

角色控制器 (Character Controller) 本质上是非物理性的,如果要将真实物理现象应用于角色,比如在绳索上摇摆、由大岩石推动,则必须使用刚体 (Rigidbody),这样才能对角色使用关节 (Joint) 和力。

角色控制器 (Character Controller) 始终沿 Y 轴对齐,因此如果角色需要能够在空间中改变方向(例如在变化的重力下),则也需要使用刚体 (Rigidbody)。但是要注意,很难将刚体 (Rigidbody) 调整为使角色感觉正常,因为游戏角色的预期行为方式是非物理性质的。另一个差异在于,角色控制器 (Character Controller) 可以平稳地滑过指定高度的台阶,而刚体 (Rigidbody) 则不能。

如果使刚体 (Rigidbody) 成为角色控制器 (Character Controller) 的父级,则该角色就会获得类似于“关节”(Joint) 的行为。

与角色控制器相关的概念有:

1、刚体(Rigidbody)。

2、碰撞体(Collider)。包括球体碰撞体(Sphere Collider)、箱体碰撞体(Box Collider)、网格碰撞体(Mesh Collider)、物理材质(Physics Material)、铰链关节(Hinge Joint)、弹簧关节(Spring Joint)等。

3、恒定力 (Constant Force)。

三、添加角色控制器的办法
有两种方式:

一种是添加Unity自带的角色控制器,直接将其拖放到游戏对象上即可。

另一种是添加你自己定义的角色控制器,办法为:选中要控制的角色对象–>【Component】–>【Physics】–>【Character Controller】,这样即可为该对象添加自定义的角色控制器组件。

四、相关属性
1、Slope Limit

坡度限制。该项用于设置所控制的角色对象只能爬上小于或等于该参数值的斜坡。

2、StepOoffset

台阶高度。该项用于设置所控制的角色对象可以迈上的最高台阶的高度。

3、Skin Width

皮肤厚度。该参数决定了两个碰撞体可以相互渗入的深度,较大的参数值会产生抖动的现象,较小的参数值会导致所控制的游戏对象被卡住,较为台理的设定是:该参数值为Radius值的10%。

4、Min Move Distance

最小移动距离。如果所控制的角色对象的移动距离小于该值,则游戏对象将不会移动,这可以避免抖动,大多数情况下将该值设为0。

5、Center

中心。该参数决定了胶囊碰撞体在世界坐标中的位置,并不影响所控制的角色对象的中心坐标。

6、Radius

半径。胶囊碰撞体的长度半径,同时该项也决定了碰撞体的宽度。

7、Height

高度。该顶用于设置所控制的角色对象的胶囊碰撞体的高度,改变此值将会使碰撞体沿着Y轴的正负两个方向同时伸缩。

五、注意事项
角色控制器不会对施加给它的作用力作出反应,也不会作用于真他的刚体。如果想让角色控制器能够作用于其他的刚体对象,可以通过脚本OnControllerColliderHit()函数在与其相碰撞的对象上使用—个作用力。另外,如果想让角色控制器受物理效果影响,那就最好用刚体来代替它。

1、Height、Radius、Step Offset等参数

可以修改角色控制器的Height和Radius参数来适配角色模型的网格,对于人形的角色一般推荐为2m左右。如果控制器的中心点不在人物中心,可修改胶囊的Center参数对其中心点进行调整,Step Offset参数也会对此产生影响,所以一般保证此值在0.1~04之间(以2m的人物角色为基准)。同时slope Limit参数值不要设定过小,通常设为90最好,此外,介于胶囊体形状的缘故,人物角色是无法爬上墙的。

2、Skin Width的设定

角色控制器的【Skin Width】是非常重要的属性,因此必须要正确地设定它。如果角色卡住了,通常是由于Skin Wdth值设得太小而导致的,该值可使其他的对象轻微地穿过角色控制器,并且可以避免抖动且防止角色卡住。

【Skin Width】最好设置为大于0.01并且大于Radius×10%的值。【Min Move Distance】的值推荐设为0。

3、技巧

如果角色频繁地被卡住,尝试调整【Skin Width】的值。

通过编写脚本,角色控制器可通过物理效果来影响其他的对象。但是,角色控制器无法通过物理效果被其他游戏对象所影响。

OK,了解了角色控制器(特别是类人角色控制器)的这些基础知识,你就知道为什么要介绍本章后续节的内容了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lihao161530340/article/details/90509935

智能推荐

JSON百科全书:学习JSON看这一篇就够了-程序员宅基地

文章浏览阅读2.8k次,点赞10次,收藏51次。JSON 对象包含两个方法:用于解析 JavaScript Object Notation(JSON)的 parse() 方法,以及将对象/值转换为 JSON 字符串的 stringify() 方法。除了这两个方法,JSON 这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。_json

【电子基础】总结·嵌入式硬件基础_哈佛j80c电源板-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏9次。嵌入式系统硬件基础By 成鹏致远第一章 常用硬件——>嵌入式系统常用的硬件器件,主要包括分立器件、光电半导体、逻辑IC、模拟IC以及存储器共五大类——>分立器件主要有:二极管、三极管、电阻、电容、电感以及场效应管等——>二极管的主要特性是单向导电性——>二极管按其用途可分为:整流二极管、稳压二极管、开关二极管、发光二极管等——>整流二级管是一种将交流电转变为直流电的半导体器件,主要用于各种低频整流_哈佛j80c电源板

组件三大属性,state,props,refs_组件自带的属性-程序员宅基地

文章浏览阅读673次。一,组件实例三大属性(1)state查看状态:在写好的组件实例上有一个属性,state,就代表这个组件的状态。接下来我们写一个有状态的组件:<body> <div id="test"></div> <script type="text/babel"> // 创建组件 class Component extends React.Component { // 初始化,调_组件自带的属性

yii2框架-yii2的组件和服务定位器(四)_yii2 unknown component id: db-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏4次。上一节主要是分析了yii2的自动加载函数,下面在分析一下yii2的核心组件与服务定位器。其实yii2的核心组件主要有以下://日志组件'log' => ['class' => 'yii\log\Dispatcher'],//视图组件,这个组件代表视图文件中的$this'view' => ['class' => 'yii\web\View'],//格式化组件,将一些输出按照一_yii2 unknown component id: db

SystemVerilog总结_systemverilog语法-程序员宅基地

文章浏览阅读6.9k次,点赞24次,收藏315次。基于SV绿皮书的systemverilog总结_systemverilog语法

2024 EasyRecovery三分钟帮你恢复 电脑硬盘格式化-程序员宅基地

文章浏览阅读1.5k次,点赞43次,收藏13次。在格式化过程中,硬盘上的所有数据并没有被擦除,而是被标记为可覆盖状态,这意味着只要数据没有被新数据完全覆盖,仍然有可能各种技术手段对其进行恢复性操作。需要注意的是,在对硬盘进行恢复性操作之前,我们需要让硬盘保持刚刚格式化的数据状态,不要再做任何删除或者存储的动作,以免对原数据产生覆盖。如果遇到电脑硬盘被格式化后,第一步要做的是暂停对该硬盘的使用,其次是搜索并下载一款专业性强且口碑不错的数据恢复软件自主恢复数据。4.等待软件扫描结束,从扫描结果中选择需要被恢复的数据后单击“恢复”即可找回丢失的数据。_easyrecovery

随便推点

5000字超干货,新中国成立70年人口流动迁移的特征与趋势可视化!-程序员宅基地

文章浏览阅读1.2k次。‍‍来源:城市数据派转自:上海数据分析‍‍大家好,我是小z今天给大家分享一篇新中国成立70年人口流动迁移的文章1 改革开放前的人口流动迁移特征改革开放前,我国人口迁移规模较改革开放后而言,..._国内人口迁移数据挖掘与可视化

快手app抓包方案常见的初探_快手抓包无网络-程序员宅基地

文章浏览阅读9k次,点赞3次,收藏14次。作为一个快手资深用户,每天使用快手app看老铁直播,出于兴趣,曾经对快手接口进行过简单研究,年前写过一个小玩意发送弹幕发送跟老铁互喷!前两天想看下是否好使,发现快手app新版本限制抓包了,那就先研究一下快手app抓包吧!经过一下午的研究,发现可以通过一下三种方式,对app就行http抓包!使用的工具: charles, root过的安卓手机一台 不同版本的快手apk1,降低apk版本[快手版本6.8]进过测试,发现降低版本可以进行抓包,测试版本6.8.0抓包通过!但缺点也很明显,apk过于老旧,_快手抓包无网络

万能数据恢复大师官方版_数据恢复大师新版-程序员宅基地

文章浏览阅读1.2k次。万能数据恢复大师是非常强大的数据恢复软件。它能够恢复误删除、误格式化、U盘\手机储存卡、分区丢失后的数据,及时拯救您宝贵的数据。_数据恢复大师新版

python distribute是什么-程序员宅基地

文章浏览阅读388次,点赞8次,收藏9次。你可以自己找到最新版本的Distribute,在这里https://pypi.python.org/pypi/distribute。可以通过distribute_setup.py 脚本来安装Distribute,也可以通过easy_install, pip,源文件来安装,不过使用distribute_setup.py来安装是最简单和受欢迎的方式。Distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包和分发包,特别是对其他的包有依赖的包。

C语言printf函数-程序员宅基地

文章浏览阅读1.7w次,点赞124次,收藏262次。C语言printf函数_c语言printf函数