这个知识点我想分成几个章节来写,分别记录不同情况下不同的移动方式。

首先是在俯视角摄像机下的键盘控制角色移动(如下图), 先写一个最简单的移动脚本吧(这个脚本也可以用于平常的小测试)

在这之前先得为角色挂上character controller组件,然后获取它。

    void move(){//首先获取横纵轴的方向float h = Input.GetAxis ("Horizontal");float v = Input.GetAxis("Vertical");//设置好移动的方向Vector3 forward = transform.TransformDirection (Vector3.forward);//设置好移动的速度float currentSpeed = moveSpeed * v;//方向*速度就是角色的移动距离了cc.SimpleMove (forward * currentSpeed);}

这个还是比较简单的,平常需要一些角色移动的测试可以用这个脚本,但是不严谨,仔细研究会发现经不起推敲,于是经过我的一番改造有了以下的代码:

    IEnumerator move_(){//首先获取横纵轴的方向float h = Input.GetAxis ("Horizontal");float v = Input.GetAxis("Vertical"); //判断纵轴(W前进,S后退)方向的正负 if(v>0){animation.Play(run.name);    //方向向前Vector3 forward = transform.TransformDirection (Vector3.forward);            //计算速度float currentSpeed = moveSpeed * v;//获取水平方向后以一定速度沿着Y轴旋转this.transform.Rotate(0,trunspeed*Time.deltaTime*h,0);//开始移动cc.SimpleMove (forward * currentSpeed);//设置一个标示判断是否需要转身,在else里需要进行判断静止状态下的水平控制旋转方向isTurn = false;//一个默认为true的旋转标示if(isRot){//如果需要转身,方向为模型正前方,即0度,使用四元数对角色旋转进行插值运算Quaternion target = Quaternion.Euler(0,0,0);this.transform.rotation = Quaternion.Slerp(this.transform.rotation,target,0.3f);//等待0.3秒完成插值运算后关闭该标示下的行为(PS:这个方法是在update下运行的)yield return new WaitForSeconds(0.3f);isRot = false;}}//方法基本同上,除了一些特别需要说明的之外其余不再累述else if(v<0){animation.Play(run.name);    //既然方向相反,那么真实方向也需要改变Vector3 back = transform.TransformDirection (Vector3.back);float currentSpeed = moveSpeed * v;//这里获取了水平方向后沿着Y轴旋转需要乘以-1,方向相反,水平轴也需要相反,不然沿着Y轴左右旋转会反  this.transform.Rotate(0,trunspeed*Time.deltaTime*h*-1,0);cc.SimpleMove (back * currentSpeed);isTurn = true;if(isRot){Quaternion target = Quaternion.Euler(0,180,0);this.transform.rotation = Quaternion.Slerp(this.transform.rotation,target,0.3f);yield return new WaitForSeconds(0.3f);isRot = false;}}//没有进行操作设置成空闲状态,在此状态下 isRot需要初始化,用于下次旋转else{if(isTurn == false){this.transform.Rotate(0,trunspeed*Time.deltaTime*h,0);}else{this.transform.Rotate(0,trunspeed*Time.deltaTime*h*-1,0);}isRot = true;animation.Play(idle.name);        }}

转载于:https://www.cnblogs.com/hellozzz/p/4179941.html

unity3d之角色的移动篇 -- 俯视视角下的键盘移动相关推荐

  1. 向左还是向右?Unity中俯视视角下人物智能转向的控制方法

    再利用动画控制人物移动的过程中,实现智能转向(自动判断向左还是向右转)功能的方法有许多种,效果不一而足,代码量也千差万别,在这里,博主给出以下四种可以实现转向方法以供参考 1.利用三维向量Vector ...

  2. [Unity实践笔记] 俯视视角人物360°移动脚本

    实现效果 俯视视角下,wasd控制人物移动,人物可进行360°流畅转身. 知识点 角度计算:绕y轴软转到direction方向需要转多少度 float angle = Vector3.Angle(ne ...

  3. Unity3D游戏开发之自由视角下的角色控制

    秦元培的博客:http://blog.csdn.net/qinyuanpei/article/details/39125353 1,[Unity3D]Unity3D游戏开发之角色控制漫谈 2,[Uni ...

  4. Unity3D大风暴之入门篇(海量教学视频版)

    Unity3D大风暴之入门篇(海量教学视频版) 智画互动开发团队 编   ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分 ...

  5. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单窗口

    Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单Shop窗口 此脚本用于创建商店以销售商品 --------------------------------- ...

  6. 【Unity3D 教程系列第 15 篇】本地数据持久化之 Playerprefs 类

    这是[Unity3D 教程系列第 15 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:什么是 PlayerPrefs 类 二:PlayerPrefs 类中的静态方法 1:写入数据 2:读取数据 ...

  7. 【Unity3D 教程系列第 12 篇】如何用Unity写一个简易的计时器工具?

    这是[Unity3D 教程系列第 12 篇],如果觉得有用的话,欢迎关注专栏. 平常关于延时的处理很多人都喜欢用携程去处理,但是在 Unity 里,并不建议大家用过多的携程,因为会出现一些莫名其妙的 ...

  8. 【Unity3D 教程系列第 10 篇】Unity 脚本中的生命周期流程图

    这是[Unity3D 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:生命周期流程图 二:常用的生命周期函数 三:脚本初始化和销毁 四:脚本的动态添加与静态添加 五:Awake ...

  9. 【Unity3D 教程系列第 16 篇】Scene视图很清楚,但是Game视图却很模糊的解决方案

    这是[Unity3D 教程系列第 16 篇],如果觉得有用的话,欢迎关注专栏. 如果你用 Unity 时,Scene 视图上很清楚,但是 Game 视图却很模糊,恭喜你,你的问题即将被解决了,继续看- ...

最新文章

  1. linux 跟阿铭学linux
  2. 算法---------前 K 个高频元素(Java版本)
  3. boost::range_const_reverse_iterator相关的测试程序
  4. Android判断一个Service是否运行
  5. 前端学习(2662):vue3.0的todolist制作演示
  6. linux运维实战练习--用户和组管理各命令的使用
  7. 事态升级是什么意思_俗语“头不顶桑脚不踩槐;生不睡柳死不睡杨”啥意思 有道理吗...
  8. 随想录(在x86 linux上仿真多核cpu运行)
  9. static与线程安全 -摘自网络
  10. OpenCV Viz 3D虚拟空间模块
  11. Cesium 1.51新功能评测
  12. 解决办法:对avcodec_parameters_from_context未定义的引用
  13. Matlab曲线平滑
  14. 基于时序哨兵数据的汛期监测(好文分享)
  15. 轻量化神经网络专题文献综述
  16. 项目质量管理的三个重要流程
  17. 字符串类型变量的相关内置函数详解
  18. strut处理页面请求过程
  19. 人工智能课程今秋走入高中课堂
  20. 大同linux培训班,大同一对一高中辅导中心地址

热门文章

  1. 【TypeScript】带类型语法的JavaScript
  2. 概率论的学习和整理13--方差和协方差(未完成)
  3. 小猫爪:S32K3学习笔记10-S32K3之EIM和ERM
  4. FF4J(特性框架)简介及入门
  5. 写给学弟学妹的一些话
  6. docker镜像上传
  7. hadoop集群部署超级详细
  8. rk3288 添加系统广播
  9. cas351019-18-6|氟吡啶-3-硼酸|2-氟吡啶-5-硼酸|6-氟-3-吡啶硼酸
  10. ASP.NET---八大子句