unity3d|Character Controller角色控制器组件


角色控制器组件简介
①.游戏物体的“引擎”
在游戏开发过程中,最关键的是游戏的主角,也就是我们玩家所操控的虚拟角色,
角色在游戏中必须“会动”,角色可以走,跑,跳,飞等等。
在 Unity 中可以让角色“动起来”的常用组件有三个:Transform,Rigidbody,
这两个我相信大家已经使用大量的使用过了。
另外还有一个组件叫做:Character Controller,角色控制器。
②.Character Controller
角色控制器也属于物理组件,它的位置在:
Component-->Physics-->Character Controller
③.角色控制器的主要用途
角色控制器主要用于第三人称或者第一人称游戏主角(人形为主)控制。
使用角色控制器组件控制角色简单移动
环境准备:
①创建一个Plane地面并赋予材质
②创建一个 Capsule 游戏物体命名为Player;
③给该游戏物体附加 Character Controller 组件【见图】
unity3d|Character Controller角色控制器组件
文章图片

控制角色移动
SimpleMove(Vector3):简单移动
以一定的速度移动角色,会自动应用重力。
[角色控制器不是刚体,但是具备刚体的一些属性]
Move(Vector3):移动
更为复杂的一种运动,每次都绝对运动,不会应用重力。
测试准备:
创建一个新的脚本命名为Player,然后拖拽挂在到Player游戏物体身上【见图】
unity3d|Character Controller角色控制器组件
文章图片

【unity3d|Character Controller角色控制器组件】SimpleMove方法移动代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour {private CharacterController characterController; private void Start() { characterController = gameObject.GetComponent(); //获取自身的角色控制器组件. }private void Update() { float horizontal = Input.GetAxis("Horizontal"); //获取横向X轴. float vertical = Input.GetAxis("Vertical"); //获取纵向Z轴.characterController.SimpleMove(new Vector3(horizontal,0,vertical)*2f); } }

效果:
unity3d|Character Controller角色控制器组件
文章图片
Move方法移动代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour {private CharacterController characterController; private void Start() { characterController = gameObject.GetComponent(); //获取自身的角色控制器组件. }private void Update() { float horizontal = Input.GetAxis("Horizontal"); //获取横向X轴. float vertical = Input.GetAxis("Vertical"); //获取纵向Z轴.characterController.Move(new Vector3(horizontal,0,vertical)*0.2f); } }

效果:
unity3d|Character Controller角色控制器组件
文章图片
角色控制器属性讲解
①Slope Limit
斜率限制,控制角色最大的爬坡斜度。[演示:角色爬坡]
unity3d|Character Controller角色控制器组件
文章图片

②Step Offset
台阶高度,控制角色可以迈上最大的台阶高度,在unity中一个Cube的高度是一米,新建一个Cube制作一个简单的台阶
[演示:角色上台阶]
unity3d|Character Controller角色控制器组件
文章图片

③Skin Width [默认即可]
皮肤厚度,在角色的外围包裹着一层“皮肤”,设置这层皮肤的厚度。
数值调大,最明显的就是角色和地面之间的间距变大,也就是角色皮肤变厚了。

④Min Move Distance [默认即可]
最小移动距离,默认是 0.001,也就是 1 毫米。
如果该数值调大,但代码中单位移动速度很慢,角色就不会动。

⑤Center/Radius/Height
角色控制器组件在 Scene 面板中体现为一个“胶囊碰撞器”的形状。
Center:控制中心点的位置;
Radius:控制半径;
Height:控制高度。

小技巧:在 Game 面板将 Gizmos 设置为选中状态,可以在运行状态看到组
件的图标,方便运行过程中对组件进行调试。

一个游戏物体附加了角色控制器组件后,
和角色控制器组件共存的其他的碰撞器组件是处于“无效”状态。
和场景中其他物体的交互碰撞,是以角色控制器组件的边缘进行判断的。
OnControllerColliderHit(ControllerColliderHit hit)函数可以通过 hit 获取到角色碰撞器碰撞到的物体的信息【代码演示】。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour {private CharacterController characterController; private void Start() { characterController = gameObject.GetComponent(); //获取自身的角色控制器组件. }private void Update() { float horizontal = Input.GetAxis("Horizontal"); //获取横向X轴. float vertical = Input.GetAxis("Vertical"); //获取纵向Z轴.characterController.SimpleMove(new Vector3(horizontal,0,vertical)*2f); }private void OnControllerColliderHit(ControllerColliderHit hit) { Debug.Log(hit.gameObject.name); } }

测试结果:
unity3d|Character Controller角色控制器组件
文章图片

此文章只是为了记录一下学习笔记,如有不足还望多多指点!

    推荐阅读