【发布时间】: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