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关于蓄力跳跃的主要内容,如果未能解决你的问题,请参考以下文章

求unity3d 用wasd与空格键控制人物移动的代码。

关于unity3d使物体消失的代码问题

关于Unity3D中鼠标移动指定物体的解决方案

unity3D 怎么才能只在原物体上克隆新物体

Unity3D 关于贝赛尔曲线,平滑曲线,平滑路径,动态曲线

unity第一人称控制器怎么使用鼠标点击