首页 > 解决方案 > unity 字符跳跃和下降超过我输入的值

问题描述

我正在使用统一制作 2d 游戏,角色只能跳跃和下降 5,因此玩家只能在 y max 为 5 且 min 为 -5 的范围之间跳跃和下降,但如果我按下跳跃或下降超过两个它跨越范围我怎样才能让玩家只能在我放置的范围内跳跃和下降?这是我的代码:

public float speed;
public float increment;
public float maxY;
public float minY;
private Vector2 targetPos;

private void FixedUpdate()
{
    transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

    if (Input.GetKeyDown(KeyCode.UpArrow) && transform.position.y <= maxY) 
    {
        Instantiate(moveEffect, transform.position, Quaternion.identity);
        targetPos = new Vector2(transform.position.x, transform.position.y + increment);
    } 
    else if (Input.GetKeyDown(KeyCode.DownArrow) && transform.position.y >= minY) 
    {
        Instantiate(moveEffect, transform.position, Quaternion.identity);
        targetPos = new Vector2(transform.position.x, transform.position.y - increment);
    }
}

标签: c#unity3d

解决方案


之后您可以通过使用liketargetValue夹紧y组件来简单地限制Mathf.Clamp

private void FixedUpdate ()
{
    ...

    targetPos.y = Mathf.Clamp(targetPos.y, minY, maxY);
}

我也只是猜测,但您使用FixedUpdate的建议可能Rigidbody2D涉及这里。

在这种情况下,您不应通过Transform组件设置位置,而应使用rb.MovePositionlike

private Rigidbody2D rb;

private void Awake()
{
    rb = GetComponent<Rigidbody2D>();
}

private void FixedUpdate()
{
    rb.MovePosition(Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime));

    ...
}

如果不是这种情况,请将您的代码移至UpdateFixedUpdate用于与游戏物理相关的内容(另请参阅Update 和 FixedUpdate


推荐阅读