void Update() { if (LaserTarget != null) { var targetRegion = UnityExtensions.CreateRectFromCamera(_camera, LaserTargetScreenPercentage); if (targetRegion.Contains(LaserTarget.transform.position)) { var direction = LaserTarget.transform.position - transform.position; if (direction != Vector3.zero) { var offsetAngle = Mathf.Sin(Time.timeSinceLevelLoad) * LaserTargetMaxOffset; var targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; var fixedTargetAngle = UnityExtensions.ClampAngle(targetAngle + TARGET_ANGLE_FIX); var currentAngle = UnityExtensions.ClampAngle(transform.rotation.eulerAngles.z); var angleDifference = UnityExtensions.ClampAngle(fixedTargetAngle - currentAngle + offsetAngle); var finalAngle = currentAngle + angleDifference * Time.deltaTime * 5f * LaserTargetAimRate; transform.rotation = Quaternion.Euler(0f, 0f, finalAngle); } } } }
IEnumerator Move() { while (this._isAlive) { yield return(Wait(0.5f)); if (!this._isAlive) { yield break; } if (Body.velocity.sqrMagnitude >= MinSqrMagnitudeToMove) { continue; } var preferedRegion = UnityExtensions.CreateRectFromCamera(_camera, PreferedScreenPercentage); Vector2 moveDirection; if (preferedRegion.Contains(transform.position)) { moveDirection = Random.insideUnitCircle; } else { var targetPosition = RandomExtensions.PointInsideRect(preferedRegion); moveDirection = targetPosition - new Vector2(transform.position.x, transform.position.y); } var impulse = Random.Range(MinImpulseForce, MaxImpulseForce); this.Body.AddForce(moveDirection.normalized * impulse, ForceMode2D.Impulse); } }