Я обнаружил это через пару лет, потому что у меня были проблемы с конвертацией между мировыми координатами обратно в положение координат экрана Точка экрана холста на самом деле не совпадает с размером экрана текущего разрешения ... размер экрана холста больше похож на лучшее оптимизированное разрешение экрана просмотра ... в параметрах растяжения вы можете видеть переменные для эталонного разрешения .. это разрешение холста.
Лучшим объяснением CANVAS SCALING является использование моей последней проблемы ...
Краткое описание моей проблемы: я использовал Canvas для отображения спрайта ( панель здоровья), которая плавает над всеми персонажами. Проблема, однако, заключалась в том, что, когда я пытался получить WorldToScreenPoint, он продолжал выдавать результат, который был слегка отключен ... например: панель состояния выглядела немного хорошо, когда персонаж был сразу перед камерой ... но как персонаж подходит к краю точки опоры камеры, расположение экранов x, y становится все более и более неправильным.
Дни и дни исследований и попытки различных комбинаций наконец-то показали мне, что, возможно, существует проблема масштабирования, которая указала мне чтобы посмотреть Canvas / Canvas Scaler / режим масштабирования: масштаб с экраном
Первоначально это работало замечательно, когда у меня был только 1 персонаж, а его индикатор здоровья оставался прикрепленным к верхней части экрана, как старый классические игры двойного дракона. НО, когда я принял решение иметь много персонажей, и им всем нужны «плавающие панели здоровья», я не вернулся, чтобы переоценить необходимость изменения этой опции.
Установка Scaler для canvas: постоянный размер пикселя , исправляет проблему, и теперь у меня правильная точка WORLDtoSCREENpoint, которая мне нужна! И теперь панель здоровья прекрасно парит над персонажами ...
НО ЖДУ, ДРУГАЯ ПРОБЛЕМА! Теперь, если разрешение экрана небольшое ... Ui-спрайт слишком большой ..... и если разрешение экрана высокой четкости, то Ui-спрайт слишком мал!
ВОПРОС: Так как мне использовать режим «масштабировать с размером экрана», но при этом получить корректный WorldToScreenPoint?
ОТВЕТ: вы должны учитывать общее масштабирование холста, когда он растягивается, чтобы соответствовать (независимо от текущего разрешения, которое вы используете)
ВМЕСТО:
myPositionOnScreen = Camera.main.WorldToScreenPoint (myOwner);
myRect.anchoredPosition = myPositionOnScreen
ВЫ РАССЧИТАЕТЕ ОБЩИЙ МАСШТАБНЫЙ ФАКТОР, КАК ЭТО:
RectTransform myRect = GetComponent<RectTransform>(); Vector2
myPositionOnScreen = Camera.main.WorldToScreenPoint (myOwner);
Canvas copyOfMainCanvas = GameObject.Find ("Canvas").GetComponent <Canvas>(); float scaleFactor =
copyOfMainCanvas.scaleFactor
Vector2 finalPosition = new Vector2 (myPositionOnScreen.x / scaleFactor , myPositionOnScreen.y / scaleFactor);
myRect.anchoredPosition = finalPosition;
Если это помогло кому-либо, пожалуйста, войдите, чтобы дать мне большой палец вверх ....
Надеюсь, это ответит на ваш вопрос.