c# - unity 角色的跳跃和下降超过我输入的值

标签 c# unity-game-engine

我正在使用 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/

相关文章:

c# - 什么是 VS2013 中的 LinqToXsdSchema 构建操作?

c# - 自定义类Identity/Entity Framework多对多关系

android - Unity需要接入华为HMS SDK,包名必须以.HUAWEI结尾

c# - 使用 C# 调用 php 脚本 (Unity)

c# - DataTable.Load() 未从 ExecuteReader() 获取数据

mysql - 如何将我的 Unity3D 应用程序连接到 Mac OSX 上的 MySQL 数据库

c# - WPF 网页浏览器 : how to display to an image after rendering has finished

c# - MS Word,使用 NPOI 库

c# - ThreadPool 中线程的名称 - C#

android - 哪些设备支持 unity?