Unity3D (5.3.5) 贴花实例化错误旋转

Unity3D (5.3.5) decals instantiate with wrong rotation

我仍然认为自己是 Unity 和 C# 方面的初学者,所以很抱歉,如果这很容易解决,但我们将不胜感激。

我想做什么:
玩家可以与世界中的立方体互动,我想给他们反馈。为此,我有一个平面的预制件,上面应用了手印的纹理。交互发生在光线投射中,手印应该在命中位置实例化。

这是我为此编写的脚本:

Ray ray = new Ray (Camera.main.transform.position, Camera.main.transform.forward);
RaycastHit hitInfo;

if (Physics.Raycast (ray, out hitInfo, usabilityRange)) {
    Vector3 hitPoint = hitInfo.point;
    GameObject go = hitInfo.collider.gameObject;

    hasInteract h = go.GetComponent<hasInteract> ();

    if (h != null) {
        h.toggleText ();
        if (interactPrefab != null) {
            Quaternion rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
            Instantiate (interactPrefab, hitPoint, rotation);
        }
    }
}

出了什么问题:
我在这个主题上找到的几乎所有教程都使用了四元数,但是当我在常规立方体上使用它时,它会在每个立方体面上以不同的旋转实例化贴花(例如,手指在一个面上朝左并朝上在另一个,等等)。现在,我不知道如何计算旋转,以便无论从哪个方向(除了顶部)激活立方体,手印的手指始终朝上。

再次感谢您阅读这面文字墙!

您 运行 遇到的问题是您的旋转方法具有额外的自由度。可以将其视为能够 "spin" 沿任意方向围绕矢量旋转,同时旋转到其他两个轴上的位置。要绕过它,您可以尝试使用不同的四元数函数:Quaternion.LookRotation。这个定义了一个向上轴和一个向前的方向,使您能够指定您正在寻找的方向。