Unity中的Mathf.clamp()函数

ray*_*yan 2 c# unity-game-engine clamp

我的游戏场景中有一个多维数据集(播放器)。我已经编写了一个C#脚本来约束Mathf.Clamp()Cube 的移动(使用),因此它不会离开屏幕。

下面是我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)
            );

    }
Run Code Online (Sandbox Code Playgroud)

的值x_minx_maxz_minz_max是-3,3,-2,8分别经由统一检查员输入。

问题

脚本运行良好,但我的播放器(多维数据集)可以负向最多移动-3.1个单位X-AXIS(如果我一直按住左箭头按钮),负向可以最多移动0.1个单位X-AXIS(此行为也适用于其他轴)。当我停止按下按钮时,它显然会夹紧-3.1到-3。

在此处输入图片说明

  • 为什么会这样呢?为什么不Mathf.Clamp()首先将多维数据集限制为-3个单位?
  • 为什么我要多得到0.1个单位?
  • 为什么这个值只有0.1个单位?为什么不多多少少?

Alo*_*lox 5

可能是由于您先设置速度然后设置位置,但在下一帧统一将速度添加到对象位置之前引起的。这就是为什么它最终减少0.1个单位的原因。

要解决此问题,请尝试将要离开边界的对象的速度重置为零。