首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unity 5字符跳转

unity 5字符跳转
EN

Stack Overflow用户
提问于 2016-10-27 04:03:25
回答 1查看 235关注 0票数 1

首先,感谢大家阅读我的问题,我正在尝试创建一个永远运行的游戏,就像地铁表面,我启动了payerControl脚本中的update()函数,迫使刚体在代码中以10分钟的速度向前移动,然后我添加了跳跃输入,当你按键盘上的upArrow时,但这里的问题是,字符有时会跳跃,大多数时间不会跳跃,因为跳跃布尔值变成真不到一秒,然后又回到假,那么有什么方法可以让跳跃过程停留2秒呢?

字符控制码:

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class player : MonoBehaviour {

    public Animator anim;
    public Rigidbody rbody;
    public float verticalJumpPower;
    public float horizantalJumpPower;
    public float playerVelocity;


    // Use this for initialization
    void Start () 
    {
        anim = GetComponent<Animator>();
        rbody = GetComponent<Rigidbody>();
        verticalJumpPower = 50f;
        horizantalJumpPower = 30f;
        playerVelocity = 10f;
    }

    // Update is called once per frame
    void Update () 
    {
        rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime);
        rbody.transform.rotation = Quaternion.identity;

        if(Input.GetKeyDown (KeyCode.UpArrow))
        {
            anim.SetBool("jump",true);
            rbody.AddForce(new Vector3(0,verticalJumpPower,horizantalJumpPower));


        }
        else
        {
            anim.SetBool("jump", false);
        }

        if(Input.GetKey(KeyCode.LeftArrow))
        {
            Vector3 currentPosition = rbody.transform.position;

                Vector3 leftPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_LEFT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z);

            rbody.transform.position = Vector3.Lerp(currentPosition,leftPosition,Time.deltaTime);

        }

        if(Input.GetKey(KeyCode.RightArrow))
        {
            Vector3 currentPosition = rbody.transform.position;
            Vector3 rightPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_RIGHT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z);
            rbody.transform.position = Vector3.Lerp(currentPosition,rightPosition,Time.deltaTime);

        }

        if(Input.GetKey(KeyCode.DownArrow))
        {
            anim.SetBool("isSlide",true);
            rbody.velocity = new Vector3(0f, 0f,5f);
            anim.applyRootMotion = false;
        }
        else
        {
            anim.SetBool("isSlide", false);
            anim.applyRootMotion = true;
        }
    }

   }
EN

回答 1

Stack Overflow用户

发布于 2016-10-27 04:40:19

GetKeyDown()仅在初始按键时返回true。现在我期望发生的事情是这样的:在关键帧的第一帧触发跳跃动画,并添加力,下一帧这一行

代码语言:javascript
复制
rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime);

重置z速度,然后达到else条件

代码语言:javascript
复制
    else
    {
        anim.SetBool("jump", false);
    }

并关闭动画。您可能想让跳跃动画运行2秒,然后让它触发一个事件来重置速度。或者你不想让特效立即运行,而是让按键改变对象的一些状态(也许存储一个游戏时间,之后你应该清除标志并重新设置速度和动画状态)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40271202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档