private void ThrowToTarget() { var targetPos = currentZone.CurrentSnapSlot().pos + currentZone.transform.position; var targetXZPos = ZeroYAxis(targetPos); CurrentlyHeldObject.transform.LookAt(targetXZPos); var position = currentlyHeldObject.transform.position; var R = Vector3.Distance(ZeroYAxis(position), targetXZPos); var G = Physics.gravity.y; var tanAlpha = Mathf.Tan(throwAngle * Mathf.Deg2Rad); var H = targetPos.y - position.y; var Vz0 = G * R * R; var Vz1 = H - R * tanAlpha; var Vz2 = 2.0f * Vz1; var Vz3 = Vz0 / Vz2; var Vz = Mathf.Sqrt(Vz3); var Vy = tanAlpha * Vz; var localVelocity = new Vector3(0f, Vy, Vz); var globalVelocity = currentlyHeldObject.transform.TransformDirection(localVelocity); currentlyHeldObject.GetComponent <Rigidbody>().velocity = globalVelocity; }
public void SnapTo(ObjectSnapZone zone) { SnapTargetPos = zone.CurrentSnapSlot().pos + zone.transform.position; var position = transform.position; var points = new[] { position, ((position + SnapTargetPos) / 2) + (Vector3.up * (Vector3.Distance(position, SnapTargetPos) / 2)), SnapTargetPos }; var path = new GoSpline(points); var config = new GoTweenConfig(); config.positionPath(path, false); config.easeType = myEaseType; Go.to(transform, throwTime, config); }