public static BallDropExperiment StartBallDropExperiment(GameObject obj) { Transform objTrans = obj.transform; GameObject dropObj = createDropObject(objTrans.position); var hips = GameObject.Find("EthanSkeleton/EthanHips"); var head = GameObject.Find("EthanSkeleton/EthanHips/EthanSpine/EthanSpine1/EthanSpine2/EthanNeck/EthanHead"); BallDropExperiment bs = new BallDropExperiment(hips, head, obj, dropObj); var rb = dropObj.GetComponents <Rigidbody>(); foreach (var rib in rb) { rib.useGravity = true; } return(bs); }
public static BallDropResults MeassureBallDropExperiment(BallDropExperiment exp) { Vector3 newBallPosition = exp.ball.transform.position; Quaternion newObjRotation = exp.obj.transform.rotation; Vector3 newHeadPosition = exp.head.transform.position; Vector3 oldBallPosition = exp.ballPosition; Quaternion oldObjRotation = exp.objRotation; //ball travel distanve --- we ignore changes in height float x = oldBallPosition.x; float z = oldBallPosition.z; float _x = newBallPosition.x; float _z = newBallPosition.z; float ballTravelDistance = Mathf.Sqrt(Mathf.Pow(x - _x, 2) + Mathf.Pow(z - _z, 2)); float headHeightOverHips = newHeadPosition.y - newBallPosition.y; float ballHeight = newBallPosition.y; float objRotationDegrees = Quaternion.Angle(newObjRotation, oldObjRotation); return(new BallDropResults(ballTravelDistance, headHeightOverHips, objRotationDegrees, ballHeight)); }