public static RadType FinnRadType(string typeTegn) { RadType radType = Udefinert; switch (typeTegn) { case "G": radType = VaktStart; break; case "f": radType = PauseStart; break; case "w": radType = PauseSlutt; break; } return(radType); }
public static void IK(GameObject aObj, GameObject bObj, GameObject cObj, GameObject tObj, float RotPsc, RadType RT = RadType.Not, GameObject pObj = null) { if (cCube == null) { cCube = new GameObject("calCube"); } aObj.transform.localEulerAngles = new Vector3(0f, 0f, 0f); bObj.transform.localEulerAngles = new Vector3(0f, 0f, 0f); float atLen = Vector3.Distance(aObj.transform.position, tObj.transform.position); float abLen = Vector3.Distance(aObj.transform.position, bObj.transform.position); float bcLen = Vector3.Distance(bObj.transform.position, cObj.transform.position); float calic = (((abLen * abLen) + (bcLen * bcLen)) - (atLen * atLen)) / (2 * abLen * bcLen); float lenRad = Mathf.Acos(calic); if (lenRad > 0f) { float bRadian = (Mathf.PI - lenRad) * Mathf.Rad2Deg; Vector3 atOfs = aObj.transform.position - tObj.transform.position; atOfs = Quaternion.Inverse(aObj.transform.parent.rotation) * atOfs; float atLenx = atOfs.x; float atLenz = atOfs.z; float mmLen = Mathf.Abs(atLenx) + Mathf.Abs(atLenz); switch (RT) { case RadType.Not: { atLenx /= mmLen; atLenz /= mmLen; } break; case RadType.Abs: { atLenx /= mmLen; atLenz /= mmLen; atLenx = Mathf.Abs(atLenx); atLenz = Mathf.Abs(atLenz); } break; case RadType.Abs_X_Rev: { atLenx /= mmLen; atLenz /= mmLen; atLenx = Mathf.Abs(atLenx); atLenz = -Mathf.Abs(atLenz); } break; case RadType.Abs_Y_Rev: { atLenx /= mmLen; atLenz /= mmLen; atLenx = -Mathf.Abs(atLenx); atLenz = Mathf.Abs(atLenz); } break; case RadType.X_Onry: { atLenz = 1f; atLenx = 0f; } break; case RadType.X_OnryRev: { atLenz = -1f; atLenx = 0f; } break; case RadType.Y_Onry: { atLenz = 0f; atLenx = 1f; } break; case RadType.Y_OnryRev: { atLenz = 0f; atLenx = -1f; } break; } bObj.transform.localEulerAngles = new Vector3(bRadian * atLenz * RotPsc, bRadian * atLenx * RotPsc, 0f); } Transform parObj = aObj.transform.parent; Transform calpObj = parObj; if (pObj != null) { calpObj = pObj.transform; } cCube.transform.position = aObj.transform.position; cCube.transform.eulerAngles = aObj.transform.eulerAngles; cCube.transform.LookAt(cObj.transform.position, calpObj.up); aObj.transform.parent = cCube.transform; cCube.transform.LookAt(tObj.transform.position, calpObj.forward); aObj.transform.parent = parObj; }