当前位置:   article > 正文

Character Controller角色控制器组件_charactercontroller

charactercontroller

 

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

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

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

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

环境准备:

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

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

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

测试准备:

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

SimpleMove方法移动代码:

 

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Player : MonoBehaviour
  5. {
  6. private CharacterController characterController;
  7. private void Start()
  8. {
  9. characterController = gameObject.GetComponent<CharacterController>();//获取自身的角色控制器组件.
  10. }
  11. private void Update()
  12. {
  13. float horizontal = Input.GetAxis("Horizontal");//获取横向X轴.
  14. float vertical = Input.GetAxis("Vertical");//获取纵向Z轴.
  15. characterController.SimpleMove(new Vector3(horizontal,0,vertical)*2f);
  16. }
  17. }

效果:

 Move方法移动代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Player : MonoBehaviour
  5. {
  6. private CharacterController characterController;
  7. private void Start()
  8. {
  9. characterController = gameObject.GetComponent<CharacterController>();//获取自身的角色控制器组件.
  10. }
  11. private void Update()
  12. {
  13. float horizontal = Input.GetAxis("Horizontal");//获取横向X轴.
  14. float vertical = Input.GetAxis("Vertical");//获取纵向Z轴.
  15. characterController.Move(new Vector3(horizontal,0,vertical)*0.2f);
  16. }
  17. }

效果:

 角色控制器属性讲解
①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 获取到角色碰撞器碰撞到的物体的信息【代码演示】。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Player : MonoBehaviour
  5. {
  6. private CharacterController characterController;
  7. private void Start()
  8. {
  9. characterController = gameObject.GetComponent<CharacterController>();//获取自身的角色控制器组件.
  10. }
  11. private void Update()
  12. {
  13. float horizontal = Input.GetAxis("Horizontal");//获取横向X轴.
  14. float vertical = Input.GetAxis("Vertical");//获取纵向Z轴.
  15. characterController.SimpleMove(new Vector3(horizontal,0,vertical)*2f);
  16. }
  17. private void OnControllerColliderHit(ControllerColliderHit hit)
  18. {
  19. Debug.Log(hit.gameObject.name);
  20. }
  21. }

测试结果:

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/118780
推荐阅读
相关标签
  

闽ICP备14008679号