角色控制器是unity内置的一个人物控制脚本。适用于第一、第三人称中控制人物的一个组件,刚体的计算量比较大, 所以出现了CharacterController来代替刚体,做具体的人物控制。
常用属性介绍
Slop Limit : 坡度的限制,限制角色可以爬坡的最大角度
Step Offset : 高度限制,上楼梯时一步的最大高度
Skin Width : 皮肤厚度
Min Move Distance : 最小移动距离
Center : 角色控制中心
Radius : 角色控制器的半径
Height : 角色控制器的高度
这些值一般由策划设置
例子一
pc电脑上通过点击来使人物移动
1
using UnityEngine;
2
using System.Collections;
3
///
4
/// People test.
5
/// 使用角色控制器,控制角色移动(播放动画)
6
/// eg:移动到鼠标点击的位置(地面上走)
7
///
8
public class PeopleTest : MonoBehaviour {
9
Animation _ani;
10
CharacterController _characterCtrl;
11
//人物移动的目的地
12
Vector3 _v = Vector3.zero;
13
void Awake(){
14
_ani = GetComponent ();
15
_characterCtrl = GetComponent ();
16
}
17
void Update(){
18
if (Input.GetMouseButtonDown (0)) {
19
//射线:从相机位置向鼠标点击位置法射射线
20
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
21
//射线碰撞的信息
22
RaycastHit hit;
23
if (Physics.Raycast (ray, out hit)) {
24
//检测射线是否发生碰撞,(碰到地面、人、墙)
25
_v = hit.point; //碰撞的这个点
26
}
27
}
28
if (Vector3.Distance (_v, transform.position) > 0.5f) {
29
Debug.Log ("Run");
30
transform.LookAt (_v);
31
_ani.Play ("Run");
32
_characterCtrl.SimpleMove (transform.forward * 5);
33
} else {
34
_ani.Play ("Idle");
35
}
36
}
37
}
会出现的bug:
- 人物角色控制器脚本里的碰撞器和地面的碰撞器不要重合,叠在一起,否则会出现一直往某地转圈的情况
- 如果点自己会出现bug,因为射线没有做具体判断,可以加上一个if条件判断一下
更多unity2018的功能介绍请到paws3d学习中心查找。