У меня еще не было возможности проверить эту математику, поэтому в ней могут быть некоторые ошибки:
Каждое графическое изображение в Unity имеет PPU, это и масштаб объекта будут огромным фактором. Ради аргумента я собираюсь четко определить их для 1 объекта.
- Размеры изображения: 128х128
- ППУ: 64
- Масштаб: 1,1,1
- Границы объекта: будет
исходить из рендера, который я не уверен, если это уже ограничивает
учитывает масштаб (скорее всего), однако в случае, если вы
не может использовать то, что вы можете рассчитать ObjectBoundsWidth или высоту
просто разделив ширину или высоту текстуры на PPU.
Это должно дать вам границы текстуры в мировом пространстве.
Мы также собираемся сделать предположение, что мы работаем только по осям X и Y и игнорируем ось Z, если вы хотите использовать Z вместо Y, тогда просто внесите необходимые изменения, чтобы иметь Z-масштаб и Z-позицию и Z границы.
Мировое положение пикселя, расположенного на 2,10. Согласно документации, координаты пикселей начинаются с нижнего левого угла, это означает, что 0,0 - это левый нижний угол, а 2,10 - это 2 пикселя влево и 10 пикселей вверх.
EDIT:
Таким образом, я включил все это в лист Google и определил, что предыдущий алгоритм, который я предоставил, был неправильным, здесь правильный в формате псевдокода
// This function takes in either the x or y, and the width or height of
// the bounds, then the x or y position of the object attached to.
// It also assumes the pivot is the center of the sprite.
float CalculateWorldPosOfPixelCoordinate(int coord, float boundsSize, float position, float scale)
{
float PixelInWorldSpace = 1.0f / PPU;
float startPos= position - (boundsSize* 0.5f * scale);
return startPos + (PixelInWorldSpace * coord) * scale;
}
Это использование объектных границ, которые мы сами определили, поэтому умножаем на масштаб.
это даст использование мировой позиции: -0,97, -0,84
Алгоритм, на мой взгляд, тот же, что и для Y, просто замените координаты позицией Y, а границы - высотой вместо ширины.
Как я и сказал, это может быть неправильно, поскольку у меня не было возможности проверить это, это также не учитывает вращение.