// Update is called once per frame void Update() { if (_target == null) { Destroy(gameObject); return; } transform.localPosition += transform.up * _speed * Time.deltaTime; if ((_target.position - transform.localPosition).sqrMagnitude < _minDistSqrt) { _target.GetComponent <AirCraft>().Kill(); Destroy(gameObject); } switch (_followMode) { case RocketLauncher.RocketFollowMode.Off: break; case RocketLauncher.RocketFollowMode.LocalLeadPoint: Vector3 _leadPoint = RocketLauncher.FirstOrderIntercept(transform.position, Vector3.zero, _speed, _target.position, RocketLauncher.GetTargetVelocity()); float rotateZ = transform.rotation.eulerAngles.z; transform.LookAt(_leadPoint); if (_leadPoint.x < transform.position.x) { transform.rotation = Quaternion.Euler(new Vector3(0, 0, MathUtilities.AngleToAngle( rotateZ, 90 + transform.rotation.eulerAngles.x, _rotateSpeed * Time.deltaTime))); } else { transform.rotation = Quaternion.Euler(new Vector3(0, 0, MathUtilities.AngleToAngle( rotateZ, -transform.rotation.eulerAngles.x - 90, _rotateSpeed * Time.deltaTime))); } break; } }