【问题标题】:Rotation off by 90 degrees unity旋转 90 度统一
【发布时间】:2021-05-24 21:16:37
【问题描述】:

我正在尝试围绕鼠标旋转我的 2d 对象。这是我拥有的代码:

void Update()
    {
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        Vector3 direction = mousePosition - transform.position;
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
          transform.rotation = Quaternion.Euler(0, 0, angle);
       // Debug.Log(angle);
    }

我的对象是一个箭头,默认情况下是向下的,所以在我开始脚本之前,我将它的 z 旋转设置为 90,所以它朝右。如果我删除 transform.rotation 线,显示的角度将是对,当我的光标在上面时它说 90,在左边它说 180 等等。所以我的问题是,为什么我需要在角度上添加 90 度才能使它真正起作用?为什么这个版本不起作用?谢谢!

【问题讨论】:

    标签: c unity3d rotation game-physics


    【解决方案1】:

    Mathf.Atan2(另见Wikipedia - Atan2

    返回值是x 轴之间的角度 [=Vector3.right] 和一个从零开始到 (x,y) 终止的二维向量。

    如果默认情况下您的箭头指向右侧但您的箭头指向右侧,它将按预期工作

    默认指向下方


    你可以简单地在顶部添加偏移旋转

    transform.rotation = Quaternion.Euler(0, 0, angle + 90);
    

    或者,如果您需要对具有不同偏移量的多个对象进行此操作,请使用可配置字段,例如

    [SerializeField] private float angleOffset;
    
    ...
    
    transform.rotation = Quaternion.Euler(0, 0, angle + angleOffset);
    

    或者您可以在启动应用程序之前手动旋转它以正确朝向右侧并存储默认偏移旋转,例如

    private Quaternion defaultRotation;
    
    private void Awake ()
    {
        defaultRotation = transform.rotation;
    }
    

    然后做

    transform.rotation = defaultRotation * Quaternion.Euler(0, 0, angle);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2022-01-13
      • 2020-04-14
      相关资源
      最近更新 更多