将平面旋转与其他对象的旋转对齐

时间:2018-08-10 08:47:28

标签: unity3d rotation quaternions

现在我正在打刀,偶然发现了一个小问题。 我正在被刀击中的表面上创建贴花,我想旋转所述贴花以匹配击中时刀的旋转。

为此,我正在使用以下代码:

“变换”是指刀的变换

    Vector3 point = Vector3.zero;
    Vector3 normal = Vector3.zero;
    Vector3 origin = controller.cam.transform.position;
    Vector3 dir = hitOrigin.position - origin;

    RaycastHit rayHit;

    if (Physics.Raycast(origin, dir.normalized, out rayHit, melee.attackReach, controller.hitMask))
    {
        if (rayHit.collider)
        {
            EHitSurface surface = Utilities.GetSurfaceFromMaterial(rayHit.collider);

            point = rayHit.point;
            normal = rayHit.normal;

            GameObject decal = Managers.instance.hitEffects.PlaceDecalAtPosition(point, normal, EHitType.CUT);

            Quaternion localRot = Quaternion.FromToRotation(-transform.right, normal);

            Vector3 euler = decal.transform.eulerAngles;
            euler.z = localRot.eulerAngles.z + 90;

            decal.transform.eulerAngles = euler;

            Managers.instance.hitEffects.PlaceImpactAtPosition(point, normal, surface);
        }
    }

问题是,例如,如果我按西墙,它将为我提供正确的旋转;如果按西墙,它将被正确旋转;如果按北墙,它将被旋转30左右。 -40度。

以下是演示该问题的简短视频:https://gfycat.com/HappyHotAmericanbadger

我如何对齐贴花以使其与刀的攻击方向匹配?我在这里做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

也许使用 localEulerAngles 代替eulerAngles会有所帮助。 如果没有,则可以使用另一个稳定的转换作为刀的父级,该刀需要脚本来忽略播放器的旋转。