void UpdateTargetPositionBasedOnCollision(ref Vector3 hitNormal) { Vector3 movement = targetPosition - currentPosition; Vector3 movementDirection = movement.normalized(); float movementLength = movement.Length; if (!Mathf.Approximately(movementLength, 0)) { Vector3 reflectDir = ComputeReflectionDirection(ref movementDirection, ref hitNormal); reflectDir.Normalize(); Vector3 perpindicularDir = PerpindicularComponent(ref reflectDir, ref hitNormal); targetPosition = currentPosition; Vector3 perpComponent = perpindicularDir * movementLength; targetPosition += perpComponent; } }