现在我正在打刀,偶然发现了一个小问题。 我正在被刀击中的表面上创建贴花,我想旋转所述贴花以匹配击中时刀的旋转。
为此,我正在使用以下代码:
“变换”是指刀的变换
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
我如何对齐贴花以使其与刀的攻击方向匹配?我在这里做错了什么?任何帮助将不胜感激。
答案 0 :(得分:0)
也许使用 localEulerAngles 代替eulerAngles会有所帮助。 如果没有,则可以使用另一个稳定的转换作为刀的父级,该刀需要脚本来忽略播放器的旋转。