【问题标题】:Align rotation of plane to rotation of other object将平面的旋转与其他对象的旋转对齐
【发布时间】:2018-08-10 08:47:27
【问题描述】:

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

为此,我使用以下代码:

“变换”是指刀的变换

    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

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

【问题讨论】:

    标签: unity3d rotation quaternions


    【解决方案1】:

    也许使用 localEulerAngles 代替 eulerAngles 会有所帮助。 如果没有,您可以使用另一个稳定的变换作为刀具的父级,它需要一个脚本来忽略玩家旋转。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2016-06-13
      • 2016-01-19
      • 2014-12-28
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多