Unity3D关于蓄力跳跃

2016年2月18日18:47:29
关于角色跳跃,蓄力跳的更高,并带有动画。
思路是,设置一个蓄力值Current,一个最大值MAX和一个最小值MIN。如果键盘某键一直被按住的话一直增加这个蓄力值cu+= Time.deltaTime*10f,但肯定有个限度的,当增加到最大值时就保持当前值等于最大值不再增加了cu=MAX,然后把这个值给物体一个向上的速度(用获取的刚体组件).velocity = new Vector3(0f, current, 0f)。基本就是这样,下面看具体实现一下。Unity3D版本是5.3.2f1

1.新建场景,一个Plan,一个空物体名字叫Player下面有个Cube,去掉Cube的BoxCollider

2.为这个Player创建4个动画片段,(PS:动画部分不是重点,只是为了更形象,此处可以省略,但需要将代码中播放动画的代码部分注释掉就行)分别是:
Idle(待机状态):保持缩放不变,位置不变;
InPressure(蓄力状态):高度变小,X Z 轴变大,来回变大还原的动画;
Jump(跳跃):高度变大,X Z 轴变小,也就是变的瘦小细长;
DownUp(颤动恢复原形):先变胖,在变回原样(缩放为1,1,1)

3.为Player创建动画控制器,从Idle->InPressure->Jump->DownUp-Idle,连接好后设置两个条件,一个是Bool类型的OnGround,一个是Float的IsPressure,需要注意的是把每个动画过度时的Has Exit Time取消勾选,下面的过度时间设为0,表示立即切换,过度条件的话看字面意思理解设置一下(再次PS一下,这部分不是重点。可省略,但需要注释掉代码中的动画控制代码。)

4.为Player加上BoxCollider组件,添加刚体组件并,锁定XYZ轴的旋转,还有动画控制器,也就是上面创建的,再添加脚本

5.脚本如下,详细介绍看注释就可以

额,在附上可以复制粘贴的吧(伸手党的福音)

using UnityEngine;
using System.Collections;public class player : MonoBehaviour {bool OnGround;   //是否在地面上float jumpPressure = 0f;  //蓄力值float MinjumpPressure = 3f;  //蓄力最小值public float MaxjumpPressure = 10f;  // 蓄力最大值Rigidbody rbody;  Animator animator;// Use this for initializationvoid Start () {OnGround = true;  //初始设置在地面上rbody = GetComponent<Rigidbody>();  //获取组件animator = GetComponent<Animator>();}// Update is called once per framevoid Update () {if (OnGround)  //判断是否在地面上{if (Input.GetButton("Jump"))  //hold  按下(住)不放空格键{if (jumpPressure < MaxjumpPressure){  //如果当前蓄力值小于最大值jumpPressure += Time.deltaTime*10f; //则每帧递增当前蓄力值}else{  //达到最大值时,当前蓄力值就等于最大蓄力值jumpPressure = MaxjumpPressure; }print("hold: "+jumpPressure);  //测试用,请忽略//这时设置动画为蓄力状态动画animator.SetFloat("IsPressure", jumpPressure);}else  //not hold   鼠标松开时{if (jumpPressure > 0f){   //如果是轻轻按下就松开则把最小蓄力值赋值给当前蓄力值//如果是按住不松则把上面递增的值传下来jumpPressure += MinjumpPressure;//给一个向上速度rbody.velocity = new Vector3(0f, jumpPressure, 0f);                    jumpPressure = 0f; //升空以后把蓄力值重设为0OnGround = false;  //在地面上设为否}                   animator.SetFloat("IsPressure", 0f); //设置动画的Float值为0animator.SetBool("OnGround", OnGround); //根据是否在地面上播放动画}}        }void OnCollisionEnter(Collision other){//检测是否碰撞到地面if (other.gameObject.tag == "Ground"){OnGround = true;            }}
}

6.如果上面2步的动画部分没做的话则注释掉上面代码中与animator相关的代码即可。
保存,测试,按空格键跳跃,长按可蓄力跳跃,并带有果冻一样的弹性动画。
对了,附上源文件:
http://pan.baidu.com/s/1kUnnjkN

Unity3D关于蓄力跳跃相关推荐

  1. scratch跳一跳游戏脚本_跳一跳游戏:经典跳一跳2微信小游戏,点开既玩

    沐沐带你发现好游戏! <跳一跳>小游戏好玩吗? <跳一跳>小程序怎么进入游戏? 文章下拉到底部, 点最后一个图片进入游戏 ---------- 只有你想不到, 没有我找不到的好 ...

  2. Three.js实现跳一跳(在线玩)

    关注公众号 前端开发博客,领27本电子书 回复加群,自助秒进前端群 游戏地址:fwjzzz.gitee.io/jump[1], 点击原文链接可以试玩,git地址:gitee.com/fwjzzz/Ju ...

  3. CocosCreator3D微信小游戏入门RunningBall(一): 物理

    CocosCreator3D微信小游戏入门:RunningBall(一) 在CocosCreator3D发布之前,虽然CocosCreator2.x版本已经有了3D的功能,但是这些3D功能并不能完全支 ...

  4. 微信:把元宇宙装进小程序

    作为月活13.09亿的国民级应用,微信的每次小升级都很容易形成现象级.2023开年,微信放大招,试图把元宇宙装进小程序. 微信小程序 XR-FRAME 不久前,微信官方在开放社区贴出了"XR ...

  5. 微信开年大作:把元宇宙装进小程序

    作为月活13.09亿的国民级应用,微信的每次小升级都很容易形成现象级.2023开年,微信要放大招,试图把元宇宙装进小程序. 不久前,微信官方在开放社区贴出了"XR-FRAME"开发 ...

  6. 使用 Three.js 实现跳一跳游戏

    游戏地址:fwjzzz.gitee.io/jump[2] git地址:gitee.com/fwjzzz/Jump[3 前言 跳一跳是微信小程序[4]的一个小游戏.长按屏幕让小人蓄力跳跃,进行游玩.按照 ...

  7. 【Unity3D日常开发】自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 参考文章:列表 Unity3D深入浅出 - 导航网格自动寻路(Navigat ...

  8. 【Unity3D】用鼠标点击事件、AddForce完成跳跃与二段跳

    游戏里面的跳跃和二段跳真的不是很难,尤其是Unity3D直接提供力量模拟引擎更是可以用极其简短的代码完成这一切. 下面的程序将加一个对鼠标左键点击的监听,实现两个球的跳跃与二段跳的功能,主要思想还是处 ...

  9. 【Unity3D】自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃

    @toc 参考文章:列表 Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh) unity3D--自带寻路Navmesh入门教程(二) Unity3D自动寻路系统Naviga ...

  10. 鬼泣模仿秀01——Unity3D实现类似鬼泣的蓄力攻击(C#)

    1 float KeyTime=0f; 2 bool addTime=false; 3 void Update () { 4 if (Input.GetKeyDown (KeyCode.J)) { 5 ...

最新文章

  1. 腾讯AR开放平台今日正式开放,提供识别、追踪、展现等多项能力
  2. 基于Java+SpringBoot+vue+element实现前后端分离蛋糕商城系统详细设计
  3. 《大数据》2015年第3期“网络大数据专题”——从系统角度审视大图计算
  4. java接口_Java接口
  5. 聚合支付、第四方支付有哪些平台?
  6. forum.anywlan.com.php,一句话让您理解WDS和WISP的区别/多数WISP路由器的简单有效的通用设置方法...
  7. CF - 1156D - 0-1-Tree
  8. 生也有涯而知也无涯,以有涯应无涯,殆矣
  9. 这个行业一半人月薪超过8千!
  10. layer.open打不开弹窗的问题
  11. 处理器架构 (十五) 国产cpu芯片与架构
  12. Arch Linux 安装后无法联网的问题
  13. 信号与系统:拉式变换(s域)求解电路的零输入、零状态响应
  14. sigmoid与softmax的区别与联系
  15. macOS - 手动修改本地app的icon
  16. springboot+jsp电子元件仓库管理系统javaweb
  17. office2007安装包下载,专业版完整版官方原版
  18. android应用开发_2020年排名前五的Android应用开发公司
  19. 分享一个不错的下载站点
  20. java修改服务器文件名,批量修改文件名 java代码

热门文章

  1. ZDNET的一个技术博客评选结果
  2. matplotlib中添加水平线和垂直线
  3. 二维矩形件排样算法之最低水平线搜索算法实现
  4. linux杀死ltp进程,LTP套件使用方法详解
  5. 【转载 | 强化学习】Curriculum Learning和Self-paced Learning的相关知识及应用
  6. amr文件服务器,如何打开amr文件?amr音频格式用什么打开?
  7. nodejs安装时遇到的问题及解决方案
  8. Redis从入门到入坟系列文章(一): keys 命令
  9. Java中判断一句英文中有多少个以p开头的单词
  10. 大数据Flink面试考题___Flink高频考点,万字超全整理(建议)