Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        Vector3 aimDir;
        float   timeToTarget;
        Vector3 targetVelocity = m_TargetStartTransform.forward * m_TargetSpeed;

        ProjectileMath.CalculateProjectileAim(m_ProjectileStartTransform.position, m_ProjectileSpeed, m_TargetStartTransform.position, targetVelocity, m_SolverIterations, out timeToTarget, out aimDir);

        Vector3[] projectilePositions = new Vector3[2] {
            m_ProjectileStartTransform.position, m_ProjectileStartTransform.position + (aimDir * timeToTarget * m_ProjectileSpeed)
        };
        m_ProjectileLineRenderer.SetPositions(projectilePositions);

        Vector3[] targetPositions = new Vector3[2] {
            m_TargetStartTransform.position, m_TargetStartTransform.position + (targetVelocity * timeToTarget)
        };
        m_TargetLineRenderer.SetPositions(targetPositions);

        m_ProjectileStartTransform.rotation = Quaternion.LookRotation(aimDir.normalized);

        m_ProjectileVelocityCalculated = m_ProjectileStartTransform.forward * m_ProjectileSpeed;
        m_TargetVelocityCalculated     = targetVelocity;
        m_TimeToTargetCalculated       = timeToTarget;


        UpdateSimulation();
    }