From 2558c941a077e080c16a119faab20f4c5824ca01 Mon Sep 17 00:00:00 2001 From: unknown <john.schihada@hotmail.com> Date: Tue, 7 Jan 2020 13:34:22 +0100 Subject: [PATCH] =?UTF-8?q?Now=20really=20Fixed=20the=20problem.=20Problem?= =?UTF-8?q?=20was:=20Vector3.angle()=20not=20only=20returns=20only=20value?= =?UTF-8?q?s=20<=20180=C2=B0=20but=20also=20only=20absolute=20angle-values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/InteractionEngine/FactSpawner.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Assets/InteractionEngine/FactSpawner.cs b/Assets/InteractionEngine/FactSpawner.cs index 80bb0af4..1ce27cff 100644 --- a/Assets/InteractionEngine/FactSpawner.cs +++ b/Assets/InteractionEngine/FactSpawner.cs @@ -158,7 +158,14 @@ public void SpawnAngle(AngleFact angleFact) //Rotate so that the rotation points from point2 to the middle of point3 and point1 angle.transform.GetChild(0).rotation = Quaternion.FromToRotation(Vector3.right, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f))); //Now the rotation around that direction must also be adjusted - angle.transform.GetChild(0).RotateAround(point2, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Angle(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized)); + //We calculate the Angle not with Vector3.Angle() because it only returns absolute angle-values + float signedAngle = Mathf.Atan2(Vector3.Dot((Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Cross(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized)), Vector3.Dot(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized)) * Mathf.Rad2Deg; + if (signedAngle < 0) + { + angle.transform.GetChild(0).RotateAround(point2, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Angle(angle.transform.GetChild(0).forward.normalized, (tempPoint3 - tempPoint1).normalized)); + } + else + angle.transform.GetChild(0).RotateAround(point2, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Angle(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized)); string letter = ((Char)(64 + angleFact.Id + 1)).ToString(); angle.GetComponentInChildren<TextMeshPro>().transform.localPosition = new Vector3((0.5f * tempProjection).x, angle.GetComponentInChildren<TextMeshPro>().transform.localPosition.y, (0.5f * tempProjection).z); -- GitLab