我该如何让gameObject在一开始快速跳跃,然后在一段时间后开始减速?这段代码不像它应该的那样工作

本文关键字:段代码 代码 工作 开始 一开始 gameObject 跳跃 一段时间 然后 | 更新日期: 2023-09-27 18:09:26

我如何让游戏对象一开始跳得很快,然后在一段时间后开始减速?这段代码不像它应该的那样工作。这正是我想要的:当游戏开始时,gameObject播放一个空闲动画,然后当用户按下他们的手指时"蹲下"(蹲下是我制作的动画),当他们松开手指时"跳跃"(一开始是快速的,然后在一段时间后减速,就像月球上的重力一样)。这是所有!为了让你更好地理解,让我们以《过马路》中的主角为例:当用户按下按键时,小鸡"蹲下",当用户松开手指时,小鸡跳起来。相同的概念,但跳跃将不同。

public float startSpeed;
public float slowAmount;
float actualSpeed;
bool isJumping;
void Awake()
{
    gameObject.GetComponent<Animation>()["Idle"].wrapMode=WrapMode.Loop;
    gameObject.GetComponent<Animation>() ["TouchDown"].wrapMode = WrapMode.Once;
}
void Start()
{
    GetComponent<Animation>().Play("Idle");
}
void Update()
{
    if (Input.touchCount > 0) 
    {
        if (Input.GetTouch (0).phase == TouchPhase.Began) 
        {
            GetComponent<Animation> ().Play ("TouchDown");
        }
        if (Input.GetTouch (0).phase == TouchPhase.Ended) 
        {
            actualSpeed = startSpeed;
            isJumping = true;
        }
        if (isJumping) 
        {
            actualSpeed -= slowAmount * Time.deltaTime;
            transform.position += new Vector3 (0.5f, actualSpeed * Time.deltaTime, 0);
        } 
    }
}

我该如何让gameObject在一开始快速跳跃,然后在一段时间后开始减速?这段代码不像它应该的那样工作

添加一个类型为float (private)的变量startY

void Update(){
    if (Input.touchCount > 0) {
        if (Input.GetTouch (0).phase == TouchPhase.Began) 
            GetComponent<Animation> ().Play ("TouchDown");
        if (Input.GetTouch (0).phase == TouchPhase.Ended){
            actualSpeed = startSpeed;
            isJumping = true;
            startY = transform.position.y;
        }
    }
    if (isJumping) {
        actualSpeed -= slowAmount * Time.deltaTime;
        transform.position += new Vector3 (0, actualSpeed * Time.deltaTime, 0);
        if(startY > transform.position.y) isJumping = false;
    } 
}

把你的Update函数改成这样