1.物体正常跳跃与二段跳

1.1 物体正常跳跃

限制物体在按下跳跃键的时候只能跳跃一次。而不是能够无限跳跃。

具体实现思路是:给地面设置标签,检测物体是否和地面碰撞。

1.1.1 地面(plane)标签设置

我们为了物体能够正常跳跃,需要给地面添加一个标签。

点击地面plane 再点击 tag 下面的AddTag选项

在AddTag页面点击➕号,创建Ground标签

创建完成后,在plane上标签中选中为Ground

1.1.2 物体跳跃代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move : MonoBehaviour
{public float moveSpeed = 5f;public float rotateSpeed = 5f;public float jumpSpeed = 8f;// 判断是否在地面上private bool isGround = true;Vector3 moveAmount;Rigidbody rb;void Start(){rb = GetComponent<Rigidbody>();}void Update(){Vector3 moveDir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;moveAmount = moveDir * moveSpeed * Time.deltaTime;Vector3 targetDir = Vector3.Slerp(transform.forward, moveDir, rotateSpeed * Time.deltaTime);transform.rotation = Quaternion.LookRotation(targetDir);if (Input.GetButtonDown("Jump")){//如果物体在地面上if (isGround){//瞬移效果//transform.Translate(Vector3.up * Time.deltaTime * jumpSpeed);// 实现跳跃效果rb.AddForce(Vector3.up * jumpSpeed);// 此时物体不在地面上isGround = false;}}}private void FixedUpdate(){rb.MovePosition(rb.position + moveAmount);}// 碰撞检测private void OnCollisionEnter(Collision collision){// 物体碰触到地面if(collision.gameObject.tag == "Ground"){// 物体在地面上isGround = true;}}
}

1.2 物体二段跳

二段跳的实现:新增两个变量,一个控制物体能否进行二段跳,一个监测物体是否在进行跳跃

物体进行二段跳的条件:当物体不在地面上&&物体能进行二段跳&&物体正在一段跳。

物体二段跳代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move : MonoBehaviour
{// 移动速度public float moveSpeed = 5f;// 旋转速度public float rotateSpeed = 5f;// 跳跃速度public float jumpSpeed = 8f;// 是否在地上private bool isGround = true;// 物体是否能进行二段跳,因为设置为可操控,所以为publicpublic bool isDoubleJump = false;// 物体是否在一段跳private bool isJump = true;Vector3 moveAmount;Rigidbody rb;void Start(){rb = GetComponent<Rigidbody>();}void Update(){Vector3 moveDir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;moveAmount = moveDir * moveSpeed * Time.deltaTime;Vector3 targetDir = Vector3.Slerp(transform.forward, moveDir, rotateSpeed * Time.deltaTime);transform.rotation = Quaternion.LookRotation(targetDir);if (Input.GetButtonDown("Jump")){if (isGround){//瞬移效果//transform.Translate(Vector3.up * Time.deltaTime * jumpSpeed);rb.AddForce(Vector3.up * jumpSpeed);// 物体正在一段跳isJump = true;// 物体不在地面上isGround = false;}// 如果物体能进行二段跳&&物体不在地面上&&物体在跳跃else if (isDoubleJump&&!isGround&&isJump){// 再进行一次跳跃操作rb.AddForce(Vector3.up * jumpSpeed);// 物体不再一段跳isJump = false;}}}private void FixedUpdate(){rb.MovePosition(rb.position + moveAmount);}private void OnCollisionEnter(Collision collision){if(collision.gameObject.tag == "Ground"){isGround = true;}}
}

此处记得打勾,物体才能进行二段跳。

2.物体的冲刺

设置sprintSpeed 将按下冲刺键时候的物体速度更改为sprintSpeed即可。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move : MonoBehaviour
{public float moveSpeed = 5f;public float rotateSpeed = 5f;public float jumpSpeed = 8f;public float sprintSpeed = 10f;private bool isGround = true;public bool isDoubleJump = false;private bool isJump = true;Vector3 moveAmount;Rigidbody rb;void Start(){rb = GetComponent<Rigidbody>();}void Update(){Vector3 moveDir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;moveAmount = moveDir * moveSpeed * Time.deltaTime;Vector3 targetDir = Vector3.Slerp(transform.forward, moveDir, rotateSpeed * Time.deltaTime);transform.rotation = Quaternion.LookRotation(targetDir);if (Input.GetButtonDown("Jump")){if (isGround){//瞬移效果//transform.Translate(Vector3.up * Time.deltaTime * jumpSpeed);rb.AddForce(Vector3.up * jumpSpeed);isJump = true;isGround = false;}else if (isDoubleJump&&!isGround&&isJump){rb.AddForce(Vector3.up * jumpSpeed);isJump = false;}}// 按住左shift键实现冲刺效果if (Input.GetKey(KeyCode.LeftShift)){moveAmount = moveDir * sprintSpeed * Time.deltaTime;}}private void FixedUpdate(){rb.MovePosition(rb.position + moveAmount);}private void OnCollisionEnter(Collision collision){if(collision.gameObject.tag == "Ground"){isGround = true;}}
}

Unity3D学习 ② 物体的正常跳跃、二段跳、冲刺相关推荐

  1. unity3d学习笔记(一)方向键移动物体

    创建移动物体 一开始我们新建了项目之后,在空白处右击找到Cube 为了方便我们在下面的project栏创建一个文件夹(GameScript) 之后我们开始创建移动脚本,同样的在project栏右击找到 ...

  2. Unity3D学习笔记6——GPU实例化(1)

    文章目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成 ...

  3. [Unity3D学习]3D数学基础之向量

    [Unity3D学习]3D数学基础之向量 2014.05.11 向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础. 一.向量 1.向量的数学定义 向量就是一个数字列表,对于程序员来说一个向量 ...

  4. unity3d 学习笔记四 skybox(天空盒) light(光源) halo(光晕)

    Unity3D学习笔记(四)天空.光晕和迷雾 六年前第一次接触<魔兽世界>的时候,被其绚丽的画面所折服,一个叫做贫瘠之地的地方,深深印在我的脑海里.当时在艾泽拉斯大陆还不能使用飞行坐骑,试 ...

  5. Unity3D学习笔记(三、小球跑酷)

    源码:键盘方向键控制小球跑酷Unity3D源码 Unity3D学习从简单例子入门,后续将持续更新. 一.跑道建立 可通过材质球Rendering Mode : Transparent 和 Albedo ...

  6. 【Unity3d学习】使用物理引擎——打飞碟游戏的物理引擎改进与射箭游戏设计

    文章目录 写在前面 HitUFO的物理引擎改进版本 物理引擎的改进版本思路与实现 PhysicsAction PhysicsManager 新接口类IActionManager 动作管理器基类的变化 ...

  7. unity3d学习(三)制作敌人简单AI和发射火球

    制作敌人简单AI和发射火球 写在前面: - 学习课本:Unity5实战 使用c#和unity开发多平台游戏-作者:Joseph Hocking - 内容:第三章 -unity3d学习(一)制作第一人称 ...

  8. Unity3D学习笔记:粒子特效参数

    Unity3D学习笔记:粒子特效参数含义 转载 https://blog.csdn.net/asd237241291/article/details/8433534 粒子特效 粒子系统检视面板 初始化 ...

  9. Unity3d 学习记录

    1.代码中的gameObject表示当前的组件资源对象 2.坐标轴: X:调整左右方向,从左往右值不断增大 Y:调整上下方向,从下往上值不断增大 Z:调整前后方向,离屏幕越近值越小,离屏值越远值越大 ...

最新文章

  1. 【 FPGA 】FIR滤波器之 Hilbert 变换的实现
  2. Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
  3. ckeditor_学习(2) 功能概览
  4. 荣幸参加 微软 Teched 2012 会议
  5. ABAP Netweaver里的那些月亮
  6. 小爱同学100个奇葩回复_小米小爱音箱Pro开箱评测,看到的不仅是全面升级更是小米loT的高速发展...
  7. Oracle GoldenGate复制过程
  8. windows安装包删了会有影响吗_win7系统删除系统更新安装包的详细教程
  9. Android测试提升效率批处理脚本
  10. 欧盟委员会支持5个开源项目漏洞奖励计划,奖金池20万欧元
  11. python-opencv中的cv.CreateImage函数的参数问题
  12. linux的vim编辑器,强大的Vim 编辑器
  13. 鸡兔同笼c语言代码while,鸡兔同笼(C语言代码)
  14. 《大白AI周报》精华内容整理汇总
  15. 大地主题的解算 matlab,大地主题解算.PPT
  16. PowerDesigner16配置显示注释comment配置方法
  17. UE4-目录结构简介
  18. android原生系统手机游戏,ROG真游戏手机系统主页面有三大虚拟按键!安卓原生系统?...
  19. 拉丁超立方抽样的Python实现
  20. 2018看得见的未来:超融合六大趋势

热门文章

  1. 分布式消息中间件设计
  2. golang 实现菜单树的生成
  3. Golang 中逐行读取文件内容
  4. 鼠标放上去提示信息插件
  5. HTML(卓音前端之旅第一站)
  6. ecshop数据字典(四)--关于会员,会员等级积分以及订单
  7. 荣耀系列手机耗电优化图解
  8. Win10 任务栏卡死问题解决
  9. EOS 修改文件名称与文件夹名称
  10. Big-M Method and Two-Phase Method