Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转
来源:互联网 发布:淘宝客营销计划条件 编辑:程序博客网 时间:2024/05/16 12:14
如果你在游戏的开发中,想要控制主角的移动却又不想处理刚体的碰撞,那么Unity3D中的角色控制器组件CharacterController就可以满足你的要求了。它包含一些刚体的属性,比如,如果在一个添加了角色控制器组件的对象上添加一个带有SimpleMove()函数的脚本,那么该对象的重力被自动应用,而且该对象的Y轴上的速度被忽略;而如果你想保留Y轴上的速度,不应用重力,则可使用角色控制器的Move()函数控制对象。好了,下面通过具体的例子来学习角色控制器CharacterController的使用方法。
我们要实现的效果是我们的英雄在三个点之间来回直线运动,并且在到达某一点时实现转身的效果。
首先新建一个工程,我们把需要的主角模型拖到场景中,主角模型可以从文章最后的工程下载后获得。我们把贴图拖到主角模型上,就出现了一个帅气的魔法师角色。然后我们新建一个平面Plane,三个空对象,命名为point1,point2,point3,并添加标识,还有在场景中加入一个Directional light灯光。完成之后的效果如下:
然后我们开始编写脚本代码,新建一个C#文件,重命名为“heroControl”,具体代码如下所示,注释都已添加。
using UnityEngine;using System.Collections;public class heroControl : MonoBehaviour { //定义主角角色控制器 CharacterController hero; //点数组 public Transform[] points; //下一个点的下标,主角移动速度 public int nextIndex; public int moveSpeed = 10; void Start() { //初始化主角移动速度 nextIndex = 0; //获得主角的角色控制器组件 hero = GetComponent<CharacterController>(); } void Update() { //如果主角距离点的距离大于0.2,则算出主角的朝向,移动主角人物 if (Vector3.Distance(ignoreY(points[nextIndex % points.Length].position), ignoreY(transform.position)) > 0.2f) { //主角的朝向即为下一个点坐标减去主角坐标的向量 Vector3 direction = (ignoreY(points[nextIndex % points.Length].position) - ignoreY(transform.position)).normalized; //插值改变主角的朝向,使其有一个自然转向的过程,防止其瞬间转向 hero.transform.forward = Vector3.Lerp(transform.forward, direction, 0.1f); //移动主角 hero.SimpleMove(transform.forward * moveSpeed); } else { //如果到达点,则使下一点作为目标点 nextIndex++; } } //这个函数用来取消向量的Y轴影响,比如主角的高度与点之间可能有一段距离,我们要忽略这段距离 Vector3 ignoreY(Vector3 v3) { return new Vector3(v3.x, 0, v3.z); }}
最后我们把脚本文件拖到主角模型上,然后别忘了把三个点拖到我们定义的点数组中
好了,运行程序,我们可以看到主角自己在三个点之间来回巡逻,并在到达某一点后转身继续向下一点运动,我们这里只是截图,所以看不出效果,请大家下载项目工程源码后运行查看效果。
项目源码下载地址:点此下载
- Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转
- Unity3d 人物控制器CharacterController
- CharacterController控制人物的移动
- Unity3D学习笔记05:四元数控制人物旋转
- unity3d-代码控制游戏角色控制器移动
- Unity3D控制人物移动跳跃,处理CharacterController的isGrounded总是返回false问题
- Unity3D控制人物移动跳跃,处理CharacterController的isGrounded总是返回false问题
- CharacterController(角色控制器)
- Unity3D 人物移动控制
- CharacterController 角色移动
- 【unity学习笔记】unity控制人物跳跃,处理CharacterController的isGrounded总是返回false的问题
- Unity3D - 控制角色移动
- Unity3d 键盘控制人物移动
- Unity3D学习笔记1-角色控制
- CharacterController.Move 实现角色移动
- Unity3D鼠标控制角色移动
- Unity3d--第三人称角色移动控制
- Unity3d键盘控制角色移动
- 窗体上鼠标移动画线
- 异常来自 HRESULT:0x80040215
- AE用线来分割线面(C#2010+AE10.0…
- 创建点的方法
- java序列化的一些知识点
- Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转
- java和javascript正则表达式的区别
- nonatomic, retain,weak,strong用法详解
- C++ explicit关键字应用方法详解
- VIM配置升级版
- 7-ZIP解压linux下的压缩包格式
- Hoj 2632 Blanks in a Table
- HDU 4648 Magic Pen 6
- To compile mplayer on Mac OS X