分类:Unity、C#、VS2015

创建日期:2016-05-02

一、简介

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

【Unity】11.1 角色控制器 (Character Controller)的更多相关文章

  1. [原]Unity3D深入浅出 - 角色控制器(Character Controller)

    角色控制器主要用于第一人称和第三人称主角的控制,并不使用刚体物理效果. 添加角色控制器的方法:依次打开菜单栏中的Component - Physiscs - Character Controller ...

  2. 角色控制器 Character Controller

    Unity中,1个单位尺寸代表1米.即在Unity中创建一个Cube的尺寸是1x1x1米大小. Unity推荐把人的身高定为大约2个Unity单位高度(2米). 为了截取角色的全身照,需要把角色Ins ...

  3. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  4. Unity手游之路&lt;七&gt;角色控制器

    我们要控制角色的移动,能够所有细节都由自己来实现.控制角色模型的移动,同一时候移动摄影机,改变视角.当然Unity也提供了一些组件,能够让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学 ...

  5. 【Unity 3D】学习笔记三十八:角色控制器

    角色控制器 在unity中,已经帮我们实现的上下左右跳等动作,并将他们封装成了角色控制器.角色控制器保存在unity标准资源包中,能够说是很的强大.能够模拟第一或者第三人称视角.不受刚体的限制,很适用 ...

  6. unity Character Controller 点滴

    unity Character Controller  点滴 1.今天在做角色的时候,发现人物跳不起来,原来设置这个属性即可,Step Offset, 这个是台阶的高度,这个值设置的越大,人物爬的越高 ...

  7. Unity中的Character Controller

    Unity中默认提供了一个Character Controller的组件用于实现角色控制,一个3D的游戏物体,可以直接添加.Character Controller会自动模拟出Capsule Coll ...

  8. 【Unity】4.4 添加角色控制器

    分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 设计完毕基本的场景后,一般都需要先运行看看效果如何,即先让场景"动起来",以方便观察不同的位置,而不 ...

  9. unity3d角色控制器01

    参考出处貌似是雨松大神.如有侵权,立即删除. 需要导入包 ①将FirstPerson Controller拖拽入Hierarchy(层次视图)中.由于角色控制器是具有一定物理引擎的,所以一定要将它放在 ...

随机推荐

  1. 文本diff算法Patience Diff

    一般在使用 Myers diff算法及其变体时, 对于下面这种例子工作不是很好, 让变化不易阅读, 并且容易导致合并冲突 void Chunk_copy(Chunk *src, size_t src_ ...

  2. Makefile 和 CMakeLists.txt

    Makefile Makefile 的格式 target: prerequisites [tab]command 例子 #Makefile all:chap1 chap2 chap1: - - - : ...

  3. XC文件管理器-打造优美易用的文件管理器

    技术:Android+java   概述 XC文件管理器,是基于Android6.0+开发的一个方便易用的文件管理器,具有文件的目录管理和文件的管理,主要包括文件的新建.删除.重命名.复制,移动剪切以 ...

  4. 微信小程序,创业新选择

    微信小程序,创业新选择 创业者们 总是站在时代的风口浪尖,他们踌躇满志无所畏惧,这大概就是梦想的力量.但是,如果没有把梦想拆解成没有可预期的目标和可执行的实现路径那么一切都只能叫做梦想. 小程序 张小 ...

  5. Android Intent之Action应用

    Log.i("txrjsms", "whereDoYouJumpFrom:"+getIntent().getPackage()); 结果是null Log.i( ...

  6. 利用Jquery和fullCalendar制作日程表

    详情请参考以下代码 <!DOCTYPE html> <html> <head> <title>利用Jquery和fullCalendar制作日程表< ...

  7. SQL语句之order by 、group by、having、where

    百度知道:1.order by是 按字段进行排序.. 字段后面可跟desc降序..asc升序..默认为升序2.group by是进行分组查询3.having和where都属于条件过滤 区别在于一般ha ...

  8. 【转】Kafka 之 中级

    摘要: Kafka配置介绍,原理介绍及生产者,消费者Java基本使用方法. 1.    配置 Ø  Broker主要配置 参数 默认值 说明(解释) broker.id =0   每一个broker在 ...

  9. 【SQL】SQL中Case When的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ...

  10. Oracle->mysql碰到的问题

    1.大小写敏感的区别(如果服务器OS是linux).    在oracle中一般情况下不区分大小写.有时候我们在使用oracle不注意大小写的问题,表名和字段名不加双引号是不区分大小写的,像这样:in ...