unity3d - 夹具旋转值

时间:2015-05-09 15:14:11

标签: unity3d rotation clamp

我有一个根据鼠标位置旋转的物体,但我想要将它夹住,使其不会超过或低于某个值。这是我的代码:

void LookAt () {

        float distance = transform.position.z - Camera.main.transform.position.z;

        Vector3 position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance);

        position = Camera.main.ScreenToWorldPoint(position);
        position.x = Mathf.Clamp(position.x, -70, 70);
        position.z = Mathf.Clamp(position.z, -70, 70);

        Vector3 target = new Vector3 (position.x, transform.position.y, position.z); // Use current object positin.y
        transform.LookAt(target);
    }

但不幸的是,它不起作用,它一直在旋转360.

编辑: 这是一个3D自上而下的游戏,我有一个坦克,我想旋转它的上半部分。我上面写的代码非常适合这项工作,但现在我不知道如何限制它,因此枪管(我旋转的部分)总是朝向敌人来自的地方。 70或者其他只是我正在测试的随机值,首先我想要确定正确的代码是什么,然后确定值是容易的部分。

1 个答案:

答案 0 :(得分:0)

实际上,问题是你要夹住一个位置,而不是一个旋转。你让它看到某一点,但限制了这一点,而不是为了满足它而需要旋转的角度。您必须使用三角法计算它想要指向的角度(更具体地说,atan2函数),将值钳位到(-70,70),然后应用 旋转到物体(使用欧拉角)。您是否需要进一步澄清这些步骤?

干杯。

P.S。请注意,atan2返回弧度值,但您的范围和欧拉角度使用度数。