【Unity】11.1 角色控制器 (Character Controller)

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

时间: 2024-08-03 18:09:30

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

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

角色控制器主要用于第一人称和第三人称主角的控制,并不使用刚体物理效果. 添加角色控制器的方法:依次打开菜单栏中的Component - Physiscs - Character Controller Slope Limit:坡度限制,角色只能爬上小宇或等于该参数值的斜坡. Step Offset:台阶高度,可以买上最高台阶的高度. Skin Width:皮肤厚度,可与其他碰撞体相互渗入的深度,参数值较大会产生抖动的现象:参数值较小会导致控制的对象被卡住.较为合理的设定就是:该参数值是Radius

unity学习--003:角色控制器(中)

在上篇 unity学习--003:角色控制器(上)中,看了点角色控制的基本实现方法,鼠标和键盘控制比较粗糙的实现. 在这篇中,主要介绍几个unity封装的角色控制方法, 然后预计在下篇中综合介绍几种主流的角色控制方法. 话不多说,开搞: 依旧是上次拖过来的几个模型 不过,这次添加了地形,素材,和天空盒,自然光,至于怎么加的,请看这里 添加地形等 不在黑黑的,心情也好点了,下面来介绍几种unity自带的角色控制操作.(这些方法都是unity自带的API) 1.CharacterController

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

向原创致敬http://blog.csdn.net/janeky/article/details/17406095 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学习相关的内容吧. Charactor Controller(角色控制器) "角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体.角色控制器不受力的影响,仅仅当你调用Mov

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

角色控制器 在unity中,已经帮我们实现的上下左右跳等动作,并将他们封装成了角色控制器.角色控制器保存在unity标准资源包中,可以说是非常的强大.可以模拟第一或者第三人称视角.不受刚体的限制,非常适用于表现游戏中的主角运动.首先还是导入标准资源包.在project视图中点击右键,选择import package--character controller 第一人称 第一人称好比用自己的眼睛来观察游戏世界.其原理就是控制scene视图中的摄像机的移动,所以屏幕显示永远都是主角正前方的画面. 将

【Unity】4.4 添加角色控制器

分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 设计完毕基本的场景后,一般都需要先运行看看效果如何,即先让场景"动起来",以方便观察不同的位置,而不是仅仅观察固定摄像机位置的死板板的场景. 这就是角色控制器的功能(实际上还不仅仅是只有这些功能). Unity已经帮你设计好了角色控制器组件(Characters),你只需要导入它,然后就可以直接使用了. 二.导入Unity自带的脚色控制器 要让你设计的场景动起来,只需要导入Unity自带的Character

C#版官方角色控制器脚本

将官方自带的角色控制器脚本,改写为C#版,以下为所有代码: CharacterMotor.cs  主要设置角色控制的系数,如运动,跳跃,移动,滑动等.第一人称与第三人称主角模型的移动与旋转的角度最后都是在这里计算的. CharacterMotor.cs  代码: 1 using UnityEngine; 2 using System.Collections; 3 4 /** 5 *主要设置角色控制的系数,如运动,跳跃,移动,滑动等.第一人称与第三人称主角模型的移动与旋转的角度最后都是在这里计算的

基于Ogre的角色控制器

基本框架 首先参照这里配置好工程. 添加一个类CharacterApplication,还有main.cpp. 直接贴代码了. characterapplication.h #pragma once #include <OgreCamera.h> #include <OgreEntity.h> #include <OgreLogManager.h> #include <OgreRoot.h> #include <Ogre.h> #include

Ember.js 入门指南——控制器(controller)

ember new chapter5_controllers cd chapter5_controllers ember server 从本篇开始进入第五章控制器,controller在Ember2.0开始越来越精简了,职责也更加单一--处理逻辑. 下面是准备工作. 从新创建一个Ember项目,仍旧使用的是Ember CLI命令创建. 在浏览器执行项目,看到如下信息说明项目搭建成功. Welcome to Ember 1,控制器简介 控制器与组件非常相似,由此,在未来的新版本中很有可能组件将会完

[ionic开源项目教程] - 第11讲 封装BaseController实现controller继承

关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 截止到第10讲,tab1[健康]模块的功能基本已经完成了,但这一讲中,controller层又做了较大的改动,因为下一讲中tab2[医疗]模块的实现跟tab1类似,考虑到不让代码冗余,这里使用BaseCtrl将公共代码提取出来作为controller的基类,供其它模块使用,提取后的[健康]模块也对应有所改动. 目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲