Unity3D学习笔记05:四元数控制人物旋转
来源:互联网 发布:数据库原理 pdf 网盘 编辑:程序博客网 时间:2024/06/05 16:50
在上一篇文章《Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转》我们学习了怎么使用角色控制器CharacterController来实现主角任务的移动和转身,那么在Unity3D中,人物的旋转是靠四元数Quaternion来实现的,我们今天就来把上一篇文章的项目代码改写一下,使其用四元数实现和角色控制器一样的转身效果,项目工程需要新建的模型,模型组件设置在上一篇文章中已经有详细的叙述,我们这里就不再重复说明,请大家转到上一篇文章浏览下载。
我们新建一个C#文件,重命名为“quaternionScript”,然后编写代码如下,代码大部分和上一篇文章内工程的代码相同 ,只是在转身的地方作了一些修改。
using UnityEngine;using System.Collections;public class quaternionScript : 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; //主角转身的终止角度即是朝向下一点的向量 Quaternion endRotation = Quaternion.LookRotation(direction); //差值设置主角的角度,开始角度是主角当前角度,终止角度是主角朝向下一点的角度 this.transform.rotation = Quaternion.Lerp(this.transform.rotation,endRotation, 0.1f); //移动主角 hero.SimpleMove(transform.forward * moveSpeed); } else { //如果到达点,则使下一点作为目标点 nextIndex++; } } //这个函数用来取消向量的Y轴影响,比如主角的高度与点之间可能有一段距离,我们要忽略这段距离 Vector3 ignoreY(Vector3 v3) { return new Vector3(v3.x, 0, v3.z); }}
在代码改动的地方已经添加了注释,我们把这个脚本文件拖到主角身上,别忘记了把上一个脚本文件删除。然后给点数组设置具体值,最后运行效果和上一篇的一致,主角人物在到达一点后转身向下一点继续运动。
附上quaternionScript脚本文件的下载地址:点此下载
- Unity3D学习笔记05:四元数控制人物旋转
- Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转
- UE4学习笔记-人物旋转控制(c++实现)
- Unity3D 人物移动控制
- Unity3d 键盘控制人物移动
- 【unity3d学习笔记】RPG 中控制相机距离拉近拉远以及旋转相机视角
- unity3d 鼠标点击 控制人物行走
- Unity3D 用按钮控制人物行走
- unity3d 鼠标点击 控制人物行走
- unity3d 鼠标点击 控制人物行走
- unity3d之鼠标控制人物移动
- Unity3d制作虚拟按钮控制人物移动
- Unity3D 旋转 方向 笔记
- unity3d脚本控制骨骼旋转
- unity3d控制camera移动旋转
- unity3d基础学习笔记12:输入控制
- Unity3D学习笔记1-角色控制
- Unity3d学习笔记3——基本运动与旋转
- Android ListView 指定显示最后一行
- 我谈windows函数的返回值规律
- vim删除行尾的空格
- ubuntu中VNC的安装配置笔记
- Poj -题目分类
- Unity3D学习笔记05:四元数控制人物旋转
- ajax表单验证
- 说2013年搜索引擎的发展趋势
- sqlserver 自定义函数
- 如何欣赏音乐(一)
- const int *pi、int const *pi 与 int *const pi的区别
- apache-tomcat-6.0.37安装经验总结
- 医学图像处理开源软件包
- FileReader:读取本地图片文件并显示