我的游戏场景中有一个 Cube(Player)。我编写了一个 C# 脚本来限制 Cube 的移动(使用 Mathf.Clamp() ),这样它就不会离开屏幕。

下面是脚本中的 FixedUpdate() 方法

private void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.velocity = movement * speed;

        rb.position = new Vector3(
            Mathf.Clamp (rb.position.x, x_min, x_max),
            0.5f,
            Mathf.Clamp(rb.position.z, z_min, z_max)
            );

    }
x_min , x_max , z_min , z_max 的值分别是-3, 3, -2, 8 通过统一检查器输入。

问题

该脚本运行良好,但我的播放器(立方体)可以在负 X-AXIS 中最多移动 -3.1 个单位(如果我一直按左箭头按钮),在负 X-AXIS 中多 0.1 个单位(这种行为也适用于其他轴)。当我停止按下按钮时,它显然会夹在 -3.1 到 -3 之间。

c# - Unity 中的 Mathf.clamp() 函数-LMLPHP
  • 为什么会这样?为什么它( Mathf.Clamp() )首先将 Cube 限制为 -3 个单位?
  • 为什么我会得到额外的 0.1 个单位?
  • 为什么这个值只有 0.1 个单位?为什么不是更多或更少?
  • 最佳答案

  • 发生这种情况是因为内部物理更新移动了您将其置于夹紧位置的立方体 after。 Mathf.Clamp() 首先确实将立方体限制在预期位置,因为您可以通过在分配位置
  • 后直接放置 Debug.Log 来验证
  • 你得到了额外的 0.1 个单位,因为你给了对象一个速度,在你夹紧
  • 由于速度和固定时间步长的设置(在项目设置 > 时间中),它是 0.1 个单位。如果你设置更高的速度,它会更多。如果您降低固定时间步长,它也会多一点。
  • 关于c# - Unity 中的 Mathf.clamp() 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43738537/

    10-11 13:57