Character Controller角色控制器组件

 

角色控制器组件简介
①.游戏物体的“引擎”
在游戏开发过程中,最关键的是游戏的主角,也就是我们玩家所操控的虚拟角色,
角色在游戏中必须“会动”,角色可以走,跑,跳,飞等等。
在 Unity 中可以让角色“动起来”的常用组件有三个:Transform,Rigidbody,
这两个我相信大家已经使用大量的使用过了。
另外还有一个组件叫做:Character Controller,角色控制器。

②.Character Controller
角色控制器也属于物理组件,它的位置在:
Component-->Physics-->Character Controller

③.角色控制器的主要用途
角色控制器主要用于第三人称或者第一人称游戏主角(人形为主)控制。

使用角色控制器组件控制角色简单移动

环境准备:

①创建一个Plane地面并赋予材质
②创建一个 Capsule 游戏物体命名为Player;
③给该游戏物体附加 Character Controller 组件【见图】

Character Controller角色控制器组件_第1张图片

 控制角色移动
SimpleMove(Vector3):简单移动
以一定的速度移动角色,会自动应用重力。
[角色控制器不是刚体,但是具备刚体的一些属性]

Move(Vector3):移动
更为复杂的一种运动,每次都绝对运动,不会应用重力。

测试准备:

创建一个新的脚本命名为Player,然后拖拽挂在到Player游戏物体身上【见图】

Character Controller角色控制器组件_第2张图片

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);
    }
}

效果:

Character Controller角色控制器组件_第3张图片 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);
    }
}

效果:

Character Controller角色控制器组件_第4张图片 角色控制器属性讲解
①Slope Limit
斜率限制,控制角色最大的爬坡斜度。[演示:角色爬坡]

Character Controller角色控制器组件_第5张图片
②Step Offset
台阶高度,控制角色可以迈上最大的台阶高度,在unity中一个Cube的高度是一米,新建一个Cube制作一个简单的台阶

[演示:角色上台阶]

Character Controller角色控制器组件_第6张图片

③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);
    }
}

测试结果:

Character Controller角色控制器组件_第7张图片

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

 

你可能感兴趣的:(unity3d,Character,Controller组件)