В настоящее время код получает прямоугольник и определяет положение его углов в Vector2. Затем он рассчитает новые положения углов с помощью Sin и Cos относительно угла прямоугольника. В настоящее время он работает только с прямоугольниками.
У меня вопрос: как можно обновить код, чтобы он работал с любым типом формы/объекта. Мне не нужен код, достаточно просто объяснить алгоритм.
foreach (var hit in hit_objects)
{
Collider2D hitCollider = hit.collider;
Bounds bounds = hitCollider.bounds;
Vector2[] corners = new Vector2[4];
corners[0] = new Vector2(bounds.min.x, bounds.min.y);
corners[1] = new Vector2(bounds.max.x, bounds.min.y);
corners[2] = new Vector2(bounds.max.x, bounds.max.y);
corners[3] = new Vector2(bounds.min.x, bounds.max.y);
Vector2 center = bounds.center;
float angle = hit.collider.gameObject.transform.rotation.eulerAngles.z * Mathf.Deg2Rad;
for (int i = 0; i < corners.Length; i++)
{
Vector2 direction = corners - center;
float rotatedX = direction.x * Mathf.Cos(angle) - direction.y * Mathf.Sin(angle);
float rotatedY = direction.x * Mathf.Sin(angle) + direction.y * Mathf.Cos(angle);
corners = new Vector2(rotatedX, rotatedY) + center;
Debug.Log(corners + " " + i);
Vector2 directionToCorner = (corners - (Vector2)transform.position);
Debug.DrawRay(transform.position, directionToCorner, Color.green);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ven-object