static void Main(string[] args) { var pred1 = new Predictable(); Predictable.Zapros(); pred1.Choise(); }
public override void Aim() { if (fixedTarget == null) { return; } if (shootSpeed == 0) { return; } if (predictable == null) { predictable = fixedTarget.GetComponent <Predictable>(); } // angle beta float beta = GetAim(); if (beta != 0) { float alpha = predictable.alpha; Vector3 distanceVect = fixedTarget.transform.position - rotateFrom.position; distanceVect.y = 0; // Get time of impact float h = distanceVect.magnitude * Mathf.Sin(alpha * Mathf.Deg2Rad); float vpx = shootSpeed * Mathf.Sin((alpha + beta) * Mathf.Deg2Rad); float t = h / vpx; // distance RotateFrom - Target' float r_vp = 0.5f / (shootSpeed * t); float epsilon = beta - Mathf.Asin(r_vp); // Rotation of angleDeg deg Quaternion rot = Quaternion.AngleAxis(epsilon, Vector3.up); Vector3 destRotated = rot * distanceVect; var targetRotation = Quaternion.LookRotation(destRotated); // Get parameter str var str = Mathf.Min(10 * Time.fixedDeltaTime, 1); rotateFrom.rotation = Quaternion.Lerp(rotateFrom.rotation, targetRotation, str); // Draw line Debug.DrawLine(shootFrom.localPosition, destRotated * 10, Color.red); } }
public override float GetAim() { if (fixedTarget != null) { // Get predictable object if (predictable == null) { predictable = fixedTarget.GetComponent <Predictable>(); } // Get prediction shootRotation = predictable.GetPrediction(shootSpeed, rotateFrom); } else { predictable = null; } return(shootRotation); }