拖动即可旋转,而不管相机的位置如何

时间:2019-09-11 04:23:24

标签: unity3d rotation 2d mouse drag

我正在使用拖动以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;
}

只要我保持鼠标单击并且不放开就可以了,但是如果我放开鼠标并再次单击以尝试再次旋转该圆,则该圆会奇怪地旋转,有时会剪断一些意外角度,有时会与阻力方向相反旋转。 请帮忙!在此先感谢:)

1 个答案:

答案 0 :(得分:1)

根本不需要使用WorldToScreenPointCamera.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;
}

enter image description here