一、简介
角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制。
二、基本概念
第三人称游戏中的这些控制器由于无规律可循,所以无法遵守固定的物理规则,例如,让某辆车每小时跑 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,了解了角色控制器(特别是类人角色控制器)的这些基础知识,你就知道为什么要介绍本章后续节的内容了