SKCameraNode в SKScene

swift5
ios
spritekit

#1

Здравствуйте!

Есть игровая сцена (SKScene). По высоте размер сцены вполне стандартный (1080, к примеру), но в ширину сцена очень большая, т.к. на ней будет расположен целый уровень. Для того, чтобы на экране всегда было видно персонажа, была создана камера при помощи SKCameraNode, которая следует прямиком за персонажем. Все работает отлично. Но вот вопрос. В связи с тем, что у девайсов Apple различный формат экрана, не на всех устройствах видно верхние и нижние края экрана. На iPad все видно отлично, но при переходе на iPhone частичка уровня теряется. В голову быстро пришла идея сделать все через Switch

switch UIScreen.main.nativeBounds.height {
            case 2436:
                print("iPhone X")
                cameraNode.yScale = прописываем данные, к примеру 1.8 (подгоняем под размер каждого девайса)
            default:
                print("nothing")

Все, в принципе, работает. Но вот хотелось бы, по возможности, прописать все одной строкой. Через Switch все делать конечно здорово, но постепенно выходят новые устройства, также можно по невнимательности какое-то устройство не включить в список.

Если говорить коротко, мне нужно сделать так, чтобы камера отдалялась от персонажа до тех пор, пока не упрется в границы сцены, чтобы игрок видел полностью весь уровень по оси Y. И также, хотелось бы прописать защитный механизм, чтобы не было таких моментов, что игрок запускает игру и видит сверху и снизу черные полосы.

Заранее спасибо!

РЕДАКТИРОВАНО

Проведя несколько экспериментов, стало ясно, что при изменении параметров только yScale, картинка становится растянутой. Так как параметры по оси X не меняются, картинка изменяется не в лучшую сторону.

В общем, я так понимаю, мне надо сделать камеру с определенным соотношением сторон и отодвигать ее от персонажа до тех пор, пока она не воткнется в границы экрана и при всем при этом соотношение стороны камеры меняться ни в коем случае не должно. Но пока не совсем понимаю, как это можно реализовать…

В моем понимании на iPad (так, для примера) камера будет работать в обычном режиме, но на iphone, где часть игровой сцены не влезает, камера будет немного отдалена назад, чтобы вместить всю сцену по оси Y. И соответственно соотношение сторон у камеры должно остаться таким же. Помогите, пожалуйста, с кодом…


#2

Пробовали использовать scale?
Высота сцены константа?
Находим разницу между высотой сцены и высотой экрана
Потом применяем scale

 scene.scale = SCNVector3(scaleValue, scaleValue, scaleValue)

Есть еще вариант
настроить - camera z position


#3

Scale нужно применить для x y z
А не только для y