人物的转动控制放在Update()函数里面.人物的移动跳跃操作则放在FixedUpdate()函数

旋转

人物的旋转可以通过 鼠标或者键盘进行操作,鼠标是轴Mouse X,键盘是轴Horizontal

  void Update(){//Debug.Log(Cursor.lockState);float rotationAmount;//通过鼠标或者键盘控制人物的转向//只要鼠标被按下,鼠标状态就会变为CursorLockMode.Locked状态if (Input.GetMouseButton(1) && (!requireLock || controlLock || Cursor.lockState ==CursorLockMode.Locked)){if (controlLock)//表示在Game窗口锁定并隐藏鼠标Cursor.lockState = CursorLockMode.Locked;//或者Cursor.visible = false;rotationAmount = Input.GetAxis("Mouse X") * mouseTurnSpeed * Time.deltaTime;}else{//键盘控制 单纯转向 if (controlLock)Cursor.lockState = CursorLockMode.None;//或者Cursor.visible = true;rotationAmount = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime;}rigi.transform.RotateAround(rigi.transform.up, rotationAmount);}

移动

人物的移动包括跳跃和在移动

在地面可以进行跳跃和移动 不可以同时进行

使用 刚体添加一个瞬时速度,完成跳跃和移动

计算一个侧向位移值,sidestep是一个自己设置的轴

 float SidestepAxisInput{//如果按住鼠标右键,水平轴也会变成侧移处理get{if (Input.GetMouseButton(1)){float sideStep = Input.GetAxis("Sidestep");float hor = Input.GetAxis("Horizontal");return Mathf.Abs(sideStep) > Mathf.Abs(hor) ? sideStep : hor;}else{return Input.GetAxis("Sidestep");}}}
   void FixedUpdate(){//起点在player对象下方groundedCheckOffset处,方向为向下,射线长度为groundedDistance,//检测层为groundLayers指定的层grounded = Physics.Raycast(rigi.transform.position + rigi.transform.up * -groundedCheckOffset,transform.up * -1, groundedDistance, groundLayers);if (grounded){rigi.drag = groundDrag;//在地上,可进行跳跃动作if (Input.GetButton("Jump")){//为刚体施加一个向上的力:该力是由向上的跳跃速度和在刚体原速度方向上的一个速度合成的//VelocityChange是一个瞬时速度rigi.AddForce(transform.up * jumpSpeed + rigi.velocity.normalized * directionalJumpFactor, ForceMode.VelocityChange);if (onMyJump != null)onMyJump();}else{//在地上且未跳跃,计算行走的方向//合成水平和竖直方向的矢量Vector3 movement = Input.GetAxis("Vertical") * rigi.transform.forward +SidestepAxisInput * rigi.transform.right;//速度的限制float appliedSpeed = walking ? speed / walkSpeedDownscale : speed;if (Input.GetAxis("Vertical") < 0.0f){appliedSpeed /= walkSpeedDownscale;}if (movement.magnitude > 0.01f){//在move的方向上添加一个瞬时速度rigi.AddForce(movement.normalized * appliedSpeed, ForceMode.VelocityChange);}else{//停止运动,且仅在y轴能运动rigi.velocity = new Vector3(0, rigi.velocity.y, 0);return;}}}else{//在空中,阻力为0rigi.drag = 0;}}

unity 官方案例之刚体控制人物移动相关推荐

  1. Unity官方案例之星际航行游戏(Space Shooter)学习总结

    这几天我学习了<Unity官方案例精讲>的Space Shooter部分,这个案例作为刚刚学习Unity的入门还是不错的,这是整个案例的代码. 下面对我觉得比较常见的几个用法进行一下总结. ...

  2. Unity官方案例——Roll a ball

    现在的我还是一名 Unity3d 游戏开发初学者,所以现在都在围绕 Unity3d 的官方案例来做练习,为此写下一些文章作为笔记,文章中难免会有一些疏漏,有些不当之处还望指正. 项目简介 首先玩家可以 ...

  3. Unity官方案例同步学习-学习日记(一)

    内容简介和了解 首问:这是一款什么类型的游戏? 答曰:其实这是官方案例的Fps射击类游戏,比较偏向卡通风格,类似于"香肠派对"和"我的世界"结合的类型.大家在u ...

  4. Unity官方案例噩梦射手开发总结<一> 角色的攻击功能实现

    愉悦的寒假生活总是会猝不及防地迎来尾声,这也意味着我大一生活的进度条已经过半了.幸运的是,在我某位优秀的学长的带领下,我完整地开发出来了unity的官方案例噩梦射手并基本实现所有功能,也是让我这个大一 ...

  5. 【Unity技术积累】鼠标控制人物移动 导航系统 动画

    使用导航系统来实现鼠标点击控制人物移动 1. 导入素材 以小球机器人为例(Unity商店下载) 布置场景 2. 添加 Nav Mesh Agent 组件 更改红框里的参数即可 Steering 操纵 ...

  6. Unity官方案例同步学习-学习日记(二)——敌人AI寻路思路设计和部分方法

    游戏中敌人AI的设计详解 主旨:承接上一篇文章player的续作,这边文章主要从代码上分析一个游戏中敌人AI的大部分的功能实现:以及游戏中在设计敌人时的思路和正确的方向,如有错误,希望每一个人都可以指 ...

  7. Unity官方案例-roll a ball

    通过学习: 1.将了解到如何新建一个游戏对象(game object) 2.为这些游戏对象添加组件(components) 3.为他们的属性(properties)赋值 4.把这些对象放置在场景(sc ...

  8. Unity官方案例学习——游戏设计理念(游戏的灵魂)

    何为游戏设计理念和游戏中的用户体验? 因为以前做的项目大多都是单一功能的完成,没太考虑设计的理念和用户体验,并且我做的大多是UI界面的实现,或者完成简单的数据添加等等,自己没有一套完整的项目经验:我们 ...

  9. unity官方案例Stealth中 激光栅栏 忽明忽暗效果实现

    LaserBlinking脚本挂在激光栅栏上 public class LaserBlinking : MonoBehaviour {public float OnTime;//激光开多久public ...

最新文章

  1. 如何搭建高可用redis架构?
  2. java中抽象类的匿名子类和匿名对象
  3. IntelliJ IDEA打开Maven项目,Spring boot所有依赖红名,不可用
  4. 深入理解TCP实现|经典PDF分享
  5. PowerShell与Unix Shell对比:八大实例
  6. mysql schema table_关于数据库中table与schema的区别详解
  7. mysql80重置密码_MySQL8.0修改密码问题
  8. STL中的map集合扩展字段比较方便
  9. Ubuntu下Truffle框架的搭建 2022年最新版
  10. 2016年读书总结(一)
  11. 星际争霸、魔兽争霸3、红色警戒之完全对比
  12. python selenium爬虫自动登录实例
  13. 歌唱比赛报名php源码,2021东方音乐挑战赛正式官宣发布 歌唱比赛音乐选秀节目全球报名招募...
  14. 前端面试题及答案(一)
  15. 枸杞功效多,这样吃效果翻倍
  16. 【等保小知识】等保3.0就是等保三级吗?
  17. 懵懂新手查找区 !!! 超详细项目各个层以及内置小层的用处
  18. 机器人运动估计系列(二)——运动学方程(上)
  19. 如有定义int a=128; 则输出语句printf(“%o”,a);的输出结果为?。
  20. 利用定时器0工作方式1——独立按键控制流水灯模式

热门文章

  1. 解决 Spring Cloud 整合 zipkin 报错:org.springframework.boot.actuate.health.CompositeHealthIndicator......
  2. Java SSLSocket的使用
  3. 智能手环的软硬件与产业
  4. 程序员需要了解的硬核知识之控制硬件
  5. 智慧班级管理系统 java
  6. 数据挖掘中的机器学习
  7. WPF 让窗口激活作为前台最上层窗口的方法
  8. 用python中的turtle库绘制一些有趣的图
  9. 阿里王坚:用“机器智能”取代“人工智能”概念
  10. 利用五次shift破解密码(Windows7)