public void ReleaseBall() { // Ran as an animation event // Apply throw force to the ball Quaternion towards = transform.rotation; if (target != null) { Transform rHand = animator.GetBoneTransform(HumanBodyBones.RightHand); towards = Quaternion.LookRotation(target.position - rHand.position); } Transform thrownBall = ikCatchController.caughtBall; ikCatchController.ReleaseCaughtBall(); ThrownController ballThrownController = thrownBall.gameObject.AddComponent <ThrownController>() as ThrownController; Vector3 beginningPoint = thrownBall.position; Vector3 endPoint = target.position; Vector3 direction = endPoint - beginningPoint; Vector3 tmpPoint = beginningPoint + direction * 0.9f; Vector3 controlPoint; ThrowPath throwPath = null; switch (throwPathState) { case ThrowPathState.Straight: throwPath = new StraightPath(beginningPoint, endPoint, throwSpeed); break; case ThrowPathState.CurveFromRight: controlPoint = tmpPoint + (Quaternion.AngleAxis(-90.0f, direction.normalized) * Vector3.up * 3); throwPath = new CurvePath(beginningPoint, controlPoint, endPoint, throwSpeed); break; case ThrowPathState.CurveFromLeft: controlPoint = tmpPoint + (Quaternion.AngleAxis(90.0f, direction.normalized) * Vector3.up * 3); throwPath = new CurvePath(beginningPoint, controlPoint, endPoint, throwSpeed); break; case ThrowPathState.CurveFromAbove: controlPoint = tmpPoint + (Quaternion.AngleAxis(0.0f, direction.normalized) * Vector3.up * 3); throwPath = new CurvePath(beginningPoint, controlPoint, endPoint, throwSpeed); break; default: print("Unrecognized ThrowPathState"); break; } ballThrownController.SetThrowPath(throwPath); RemoveTarget(); throwState = ThrowState.None; }
public void SetThrowPath(ThrowPath t) { throwPath = t; }