У меня есть код, который берет прямоугольник и получает расположение его углов, как если бы прямоугольник был повернут 0 градусов, а затем с помощью 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[i] - 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[i] = new Vector2(rotatedX, rotatedY) + center;
Debug.Log(corners[i] + " " + i);
Vector2 directionToCorner = (corners[i] - (Vector2)transform.position);
Debug.DrawRay(transform.position, directionToCorner, Color.green);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-a-tangen
Мобильная версия