赞
踩
角色控制器组件简介
①.游戏物体的“引擎”
在游戏开发过程中,最关键的是游戏的主角,也就是我们玩家所操控的虚拟角色,
角色在游戏中必须“会动”,角色可以走,跑,跳,飞等等。
在 Unity 中可以让角色“动起来”的常用组件有三个:Transform,Rigidbody,
这两个我相信大家已经使用大量的使用过了。
另外还有一个组件叫做:Character Controller,角色控制器。
②.Character Controller
角色控制器也属于物理组件,它的位置在:
Component-->Physics-->Character Controller
③.角色控制器的主要用途
角色控制器主要用于第三人称或者第一人称游戏主角(人形为主)控制。
使用角色控制器组件控制角色简单移动
环境准备:
①创建一个Plane地面并赋予材质
②创建一个 Capsule 游戏物体命名为Player;
③给该游戏物体附加 Character Controller 组件【见图】
控制角色移动
SimpleMove(Vector3):简单移动
以一定的速度移动角色,会自动应用重力。
[角色控制器不是刚体,但是具备刚体的一些属性]
Move(Vector3):移动
更为复杂的一种运动,每次都绝对运动,不会应用重力。
测试准备:
创建一个新的脚本命名为Player,然后拖拽挂在到Player游戏物体身上【见图】
SimpleMove方法移动代码:
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class Player : MonoBehaviour
- {
-
- private CharacterController characterController;
-
- private void Start()
- {
- characterController = gameObject.GetComponent<CharacterController>();//获取自身的角色控制器组件.
- }
-
- 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<CharacterController>();//获取自身的角色控制器组件.
- }
-
- 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<CharacterController>();//获取自身的角色控制器组件.
- }
-
- 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);
- }
- }
测试结果:
此文章只是为了记录一下学习笔记,如有不足还望多多指点!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。