我尝试获取画布正在使用的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;
}