Unity获取原点和鼠标点击之间的角度

时间:2016-08-23 12:27:45

标签: c# math unity3d rotation trigonometry

我尝试获取画布正在使用的UI上的原点(当前在' worldPosition坐标中定义)和mouseclick event之间的角度差异screenspace-camera

以前,在我从“#world”世界空间'更改UI画布的设置之前,这个工作正常。我点击圆圈上的一个点,将返回正确的角度(+/- 0.10f,这是可以接受的)。

然而,当我继续开发我的UI时,我发现我需要更改画布设置以使用屏幕空间 - camera(与main camera不同的相机)。但是现在,出现意想不到的异常行为。

当我点击UI圈上的一个点(比如说向右约45度的角度)时,这样可以正常工作。但是,如果我点击一个点就可以说,~210degrees到右边(或者你喜欢的-150度)它返回~60度。如果我点击〜180度,它会返回〜68度等......我看不到相关性。

基本上,如果我们将圆圈转换为网格,返回的角度始终在+ y和+ x象限内(右上角quadrant,其中0,0是圆的中心)。我不确定为什么,也看不到相关性。

这是我的代码,包括获取鼠标点击位置和获取角度;

public void YawPressed()
{
        Vector2 clickPosition = consoleCamera.ViewportToWorldPoint(Input.mousePosition);
        Vector2 centerPosition = new Vector2(center.position.x, center.position.y);
        float angle = GetAngleBetweenVectors(centerPosition, clickPosition);
}

public float GetAngleBetweenVectors(Vector2 vector1, Vector2 vector2)
{
        Vector2 difference = vector2 - vector1;
        rawTargetAngle = Vector2.Angle(Vector2.up, vector2);
        float angle = rawTargetAngle;

        difference *= -1;


        if (difference.x < 0 && difference.y >= 0)
        {
            angle = 360 - rawTargetAngle;
        }
        else if (difference.x < 0 && difference.y <= 0)
        {
            angle = 360 - rawTargetAngle;
        }

        userTargetAngle = angle;
        Debug.Log("Angle: " + angle + " ---- Difference: " + difference + " ---- Raw: " + rawTargetAngle);
        return angle;
}

0 个答案:

没有答案