我正在使用 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);
}
}
最佳答案
之后您可以通过使用 Mathf.Clamp
限制 y
组件来简单地限制 targetValue
喜欢
private void FixedUpdate ()
{
...
targetPos.y = Mathf.Clamp(targetPos.y, minY, maxY);
}
我也只是猜测,但你使用 FixedUpdate
表明这里可能涉及 Rigidbody2D
。
在这种情况下,您不应通过 Transform
组件设置位置,而应使用 rb.MovePosition
喜欢
private Rigidbody2D rb;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
rb.MovePosition(Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime));
...
}
如果不是这种情况,请将代码移至 Update
,因为 FixedUpdate
仅用于与游戏物理相关的内容(另请参阅 Update and FixedUpdate )
关于c# - unity 角色的跳跃和下降超过我输入的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57790365/