private void UpdateRotation() { var newDirection = GetRotationVector(); var targetRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(newDirection); var newRotation = Quaternion.RotateTowards(transform.rotation, targetRotation, MaxRotationSpeed * Time.deltaTime); transform.rotation = newRotation; }
private void UpdateRotation(Vector2 movementDirection) { Vector2 newDirection = _isAiming ? GetRotationVector() : movementDirection; var targetRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(newDirection); var newRotation = Quaternion.RotateTowards(transform.rotation, targetRotation, MaxRotationSpeed * Time.deltaTime); transform.rotation = newRotation; }
protected override void CreateSingleProjectile(Vector3 direction) { var weaponRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(direction); var angle = UnityEngine.Random.Range(-ScatterAngle, ScatterAngle); var euler = weaponRotation.eulerAngles; var newRotation = Quaternion.Euler(euler.x, euler.y, euler.z + angle); var newDirection = newRotation * Vector3.up; base.CreateSingleProjectile(newDirection); }
public void Init(Vector2 direction, Collider2D parentCollider, int damage, float projectileSpeed, float throwbackPower) { _rigidbody = GetComponent <Rigidbody2D>(); _direction = direction; _damage = damage; _throwbackPower = throwbackPower; transform.rotation = RotationUtils.DirectionVectorToRotationQuaternion2D(direction); _rigidbody.AddForce(direction * projectileSpeed); _prevPosition = transform.position; _initialized = true; var col = GetComponent <Collider2D>(); Physics2D.IgnoreCollision(col, parentCollider, true); }
void Update() { var distance = (transform.position - Target.position).magnitude; if (distance < MaxDetectionRange) { var direction = Target.position - transform.position; var expectedRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(direction.normalized); var newRotation = Quaternion.RotateTowards(transform.rotation, expectedRotation, RotationRate * Time.deltaTime); transform.rotation = newRotation; if (distance < StopFollowDistance) { return; } var hit = Physics2D.Linecast(transform.position, Target.position, 1 << LayerMask.NameToLayer("Obstacle")); if (hit.collider == null) { transform.position = Vector2.MoveTowards(transform.position, Target.position, MovementSpeed * Time.deltaTime); } } }