我正在使用拖动以2D旋转对象,并且我的相机一直在移动,这会影响对象的旋转。我想旋转以独立于相机位置。最简单的方法是什么? 当圆圈瞬间产生时,它确实旋转了我的圆圈。
这是我的轮换代码:
private float BaseAngle = 0.0f;
void OnMouseDown()
{
BaseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg;
BaseAngle -= Mathf.Atan2(Camera.main. transform.right.y, Camera.main.transform.right.x) * Mathf.Rad2Deg;
}
void OnMouseDrag()
{
float ang = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - BaseAngle;
float FCR = ang * 2f;
if (CirclesinScene.Count > 0)
{
//I have an array of circles, I want to rotate the first circle only
CirclesinScene[0].transform.rotation = Quaternion.AngleAxis(FCR, Vector3.forward);
}
}
private void Update()
{
pos = Camera.main.WorldToScreenPoint(Camera.main.transform.position);
pos = Input.mousePosition - pos;
}
只要我保持鼠标单击并且不放开就可以了,但是如果我放开鼠标并再次单击以尝试再次旋转该圆,则该圆会奇怪地旋转,有时会剪断一些意外角度,有时会与阻力方向相反旋转。 请帮忙!在此先感谢:)
答案 0 :(得分:1)
根本不需要使用WorldToScreenPoint
或Camera.transform.position
。
主要问题是您没有考虑CirclesinScene[0]
的原始方向。
这应该做
private void OnMouseDown()
{
BaseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - CirclesinScene[0].transform.eulerAngles.z / 2;
}
private void OnMouseDrag()
{
var ang = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - BaseAngle;
var FCR = ang * 2f;
if (CirclesinScene.Count > 0)
{
//I have an array of circles, I want to rotate the first circle only
CirclesinScene[0].transform.rotation = Quaternion.Euler(0, 0, FCR);
}
}
private void Update()
{
pos = Input.mousePosition;
}