Unity3D学习笔记05:四元数控制人物旋转
2013-08-22 14:29
741 查看
在上一篇文章《Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转》我们学习了怎么使用角色控制器CharacterController来实现主角任务的移动和转身,那么在Unity3D中,人物的旋转是靠四元数Quaternion来实现的,我们今天就来把上一篇文章的项目代码改写一下,使其用四元数实现和角色控制器一样的转身效果,项目工程需要新建的模型,模型组件设置在上一篇文章中已经有详细的叙述,我们这里就不再重复说明,请大家转到上一篇文章浏览下载。
我们新建一个C#文件,重命名为“quaternionScript”,然后编写代码如下,代码大部分和上一篇文章内工程的代码相同 ,只是在转身的地方作了一些修改。
在代码改动的地方已经添加了注释,我们把这个脚本文件拖到主角身上,别忘记了把上一个脚本文件删除。然后给点数组设置具体值,最后运行效果和上一篇的一致,主角人物在到达一点后转身向下一点继续运动。
附上quaternionScript脚本文件的下载地址:点此下载
我们新建一个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脚本文件的下载地址:点此下载
相关文章推荐
- Android-四元数-控制VR设备的旋转
- Unreal 入门-人物走跑跳相关问题:方向控制和人物旋转不匹配。并且人物动画状态变换不协调。
- Unity3D学习笔记04:角色控制器CharacterController控制人物移动旋转
- UE4学习笔记-人物旋转控制(c++实现)
- unity3d四元数和旋转矩阵
- Android之GLES2.0控制立方体旋转测试代码
- 人物控制,沿墙滑动跳跃的实现
- 欧拉角、四元数和旋转矩阵
- Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- unity 利用四元数旋转向量时出错 解决方法
- iOS开发中控制屏幕旋转,个别界面强制横屏
- unity 控制旋转的方法
- Unity 移动端实现pad 端acceleration 控制移动、旋转
- Android APP禁止旋转和软键盘的控制
- unityXBOX控制第一人称人物的双向转动
- unity3d 鼠标点击 控制人物行走
- 四元数与旋转
- 【VC++游戏开发#十】2D篇 —— 人工智能(一):滚动地图 & 用鼠标控制人物的走动
- C#控制图像旋转和翻转的方法
- GimbalLock万向节锁与四元数旋转