Пример #1
0
    // 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);
            }
        }
    }