예제 #1
0
        // Update is called once per frame
        void Update()
        {
            if (guidanceEnabled)
            {
                Maneuvring.TurnToward(transform, targetPosition, maxRotationAngles, steeringPIDController);
                engines.SetSteeringInputs(steeringPIDController.GetControlValues());
            }
            else
            {
                engines.SetSteeringInputs(Vector3.zero);
            }

            engines.SetMovementInputs(new Vector3(0, 0, 1));
        }
예제 #2
0
        // Update is called once per frame
        void Update()
        {
            // Turn toward the lead target position
            if (targetLeader.Target != null)
            {
                // Set the target leader's intercept speed as the current missile speed
                targetLeader.InterceptSpeed = engines.GetCurrentMaxSpeedByAxis(false).z;

                Vector3 toTargetVector        = targetLeader.Target.transform.position - transform.position;
                Vector3 adjustedLeadTargetPos = transform.position + (targetLeader.LeadTargetPosition - transform.position).normalized * toTargetVector.magnitude;

                float   leadTargetAngle = Vector3.Angle(toTargetVector, adjustedLeadTargetPos - transform.position);
                float   amount          = Mathf.Clamp(maxLeadTargetAngle / leadTargetAngle, 0, 1);
                Vector3 nextTargetPos   = amount * adjustedLeadTargetPos + (1 - amount) * targetLeader.Target.transform.position;

                Maneuvring.TurnToward(transform, nextTargetPos, maxRotationAngles, steeringPIDController);
                engines.SetRotationThrottleValues(steeringPIDController.GetControlValues());
            }
            else
            {
                engines.SetRotationThrottleValues(Vector3.zero);
            }
        }