// Update is called once per frame void Update() { this.transform.LookAt(goTarget.transform.position); if (Input.GetKeyDown(KeyCode.E)) { if (bUseConstantSpeed) { int iIterations = 0; Projectile bullet = GameObject.Instantiate(prefProjectile, this.transform.position, transform.rotation).GetComponent <Projectile>(); float fCheckTime = fBaseCheckTime; Vector3 v3TargetPosition = objectTracker.GetProjectedPosition(fBaseCheckTime); Debug.DrawLine(this.transform.position, v3TargetPosition, Color.red, 1); //Predict projectile position Vector3 v3PredictedProjectilePosition = this.transform.position + ((v3TargetPosition - this.transform.position).normalized * fSpeed * fCheckTime); Debug.DrawLine(this.transform.position, v3PredictedProjectilePosition, Color.green, 3); fDistance = (v3TargetPosition - v3PredictedProjectilePosition).magnitude; while (fDistance > 1.5f && iIterations < iMaxIterations) { iIterations++; fCheckTime += fTimePerCheck; v3TargetPosition = objectTracker.GetProjectedPosition(fCheckTime); Debug.DrawLine(goTarget.transform.position, v3TargetPosition, Color.red, 3); v3PredictedProjectilePosition = this.transform.position + ((v3TargetPosition - this.transform.position).normalized * fSpeed * fCheckTime); Debug.DrawLine(this.transform.position, v3PredictedProjectilePosition, Color.green, 3); fDistance = (v3TargetPosition - v3PredictedProjectilePosition).magnitude; } Vector3 v3Velocity = v3TargetPosition - this.transform.position; bullet.Shoot(v3Velocity.normalized, fSpeed); } else { Vector3 v3TargetPosition = objectTracker.GetProjectedPosition(fTimeTilTarget); Debug.DrawLine(this.transform.position, v3TargetPosition, Color.red, 1); Projectile bullet = GameObject.Instantiate(prefProjectile, this.transform.position, transform.rotation).GetComponent <Projectile>(); Vector3 v3Velocity = v3TargetPosition - this.transform.position; float fVelocity = v3Velocity.magnitude / fTimeTilTarget; bullet.Shoot(v3Velocity.normalized, fVelocity); } } }