角色控制器组件简介
①.游戏物体的“引擎”
在游戏开发过程中,最关键的是游戏的主角,也就是我们玩家所操控的虚拟角色,
角色在游戏中必须“会动”,角色可以走,跑,跳,飞等等。
在 Unity 中可以让角色“动起来”的常用组件有三个:Transform,Rigidbody,
这两个我相信大家已经使用大量的使用过了。
另外还有一个组件叫做:Character Controller,角色控制器。
②.Character Controller
角色控制器也属于物理组件,它的位置在:
Component-->Physics-->Character Controller
③.角色控制器的主要用途
角色控制器主要用于第三人称或者第一人称游戏主角(人形为主)控制。
使用角色控制器组件控制角色简单移动
环境准备:
①创建一个Plane地面并赋予材质
②创建一个 Capsule 游戏物体命名为Player;
③给该游戏物体附加 Character Controller 组件【见图】
文章图片
控制角色移动
SimpleMove(Vector3):简单移动
以一定的速度移动角色,会自动应用重力。
[角色控制器不是刚体,但是具备刚体的一些属性]
Move(Vector3):移动
更为复杂的一种运动,每次都绝对运动,不会应用重力。
测试准备:
创建一个新的脚本命名为Player,然后拖拽挂在到Player游戏物体身上【见图】
文章图片
【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);
}
}
效果:
文章图片
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);
}
}
效果:
文章图片
角色控制器属性讲解
①Slope Limit
斜率限制,控制角色最大的爬坡斜度。[演示:角色爬坡]
文章图片
②Step Offset
台阶高度,控制角色可以迈上最大的台阶高度,在unity中一个Cube的高度是一米,新建一个Cube制作一个简单的台阶
[演示:角色上台阶]
文章图片
③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|unity3d-多人坦克对战
- Unity3D|Unity3d之坦克对战游戏 AI设计
- 笔记|Unity角色控制器CharacterController移动代码
- Unity3d|【Unity3D Debug】“CharacterController.Move()在处理角色移动时,角色不论怎么转向其移动方向始终不变”的解决方案
- Unity3D|Unity3D 角色控制器 Character Controller
- 毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
- unity3d|Unity3D实现3D立体游戏原理及过程
- Unity3d|Unity Gameplay工具集(Unity Gameplay Tool Set)
- Unity3D|Unity3D ML-Agent-0.8.1 学习一(基础教程)