Ответ 1
Первое, что вы, возможно, захотите заметить, это то, что при импорте изображения в единство как Texture Type = Sprite существует атрибут "Pixels To Units", который вы увидите в активе спрайта.
Таким образом, ваш 128px, если оставить его по умолчанию, будет 1,28 "Units" wide. Однако это значение не соответствует вашим мерам 1.06, поэтому я не уверен, откуда это взялось. Это может быть из-за того, что масштаб вашего объекта спрайта не является однородным, или это может быть связано с изменением настроек "Пиксели к единицам". Дважды проверьте инспектор, что ваша текстура ввода на самом деле равна 128x128, а также проверьте, что значение Pixel to Units - это то, что вы ожидаете.
Затем обратите внимание, что "Размер" орфографической камеры соответствует половине ее высоты.
Итак, на рисунке ниже орто-камера увидит область в белом прямоугольнике. Размер 5, означает 10 единиц. Картина цветка, который у меня на сцене, имеет изображение шириной 128 пикселей на 96 пикселей, импортированное по умолчанию (1 единица = 100 пикселей).
Теперь я не уверен, что ваш конкретный вариант использования (то есть, возможно, это лучше разрешено с помощью GUITexture). Однако, предполагая, что вы хотите использовать Sprite, и каждый кадр, который вы хотите, чтобы он находился в верхнем левом углу, и вы хотите, чтобы спрайт всегда отображался в исходном res, тогда следующий код будет делать это. Добавьте его в script, прикрепленный к игровому объекту Sprite.
// Update is called once per frame
void Update () {
float camHalfHeight = Camera.main.orthographicSize;
float camHalfWidth = Camera.main.aspect * camHalfHeight;
Bounds bounds = GetComponent<SpriteRenderer>().bounds;
// Set a new vector to the top left of the scene
Vector3 topLeftPosition = new Vector3(-camHalfWidth, camHalfHeight, 0) + Camera.main.transform.position;
// Offset it by the size of the object
topLeftPosition += new Vector3(bounds.size.x / 2,-bounds.size.y / 2, 0);
transform.position = topLeftPosition;
}