Unity3D关于蓄力跳跃
Posted TPMer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D关于蓄力跳跃相关的知识,希望对你有一定的参考价值。
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 initialization
void Start ()
OnGround = true; //初始设置在地面上
rbody = GetComponent<Rigidbody>(); //获取组件
animator = GetComponent<Animator>();
// Update is called once per frame
void 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; //升空以后把蓄力值重设为0
OnGround = false; //在地面上设为否
animator.SetFloat("IsPressure", 0f); //设置动画的Float值为0
animator.SetBool("OnGround", OnGround); //根据是否在地面上播放动画
void OnCollisionEnter(Collision other)
//检测是否碰撞到地面
if (other.gameObject.tag == "Ground")
OnGround = true;
6.如果上面2步的动画部分没做的话则注释掉上面代码中与animator相关的代码即可。
保存,测试,按空格键跳跃,长按可蓄力跳跃,并带有果冻一样的弹性动画。
对了,附上源文件:
http://pan.baidu.com/s/1kUnnjkN
以上是关于Unity3D关于蓄力跳跃的主要内容,如果未能解决你的问题,请参考以下文章