Все никак не пойму как сделать сцену чтобы она выглядела по размерам на всех телефонах одинаково, делал под свой телефон а когда проверил на другом то разница была в размерах, где-то границы вплотную, где-то есть просветы.
в канвасе у меня стоит render mode - overlay , как я понимаю оно таким образом должно подстраиваться под все разрешения под все телефоны.
canvas scaler - constant pixel size
Как правильно настраивать чтобы на всех телефонах выглядело точно так же как и на сцене?
Как ты себе это представляешь? Вот у меня квадратный экран и в его центре тоже нарисован квадрат, соответственно между квадратом и границей экрана везде одинаковые расстояния.
А вот я это открываю на прямоугольном экране. Как это будет выглядеть?
freeExec, ну квадратных телефонов я не видел...
Суть в том что я смотрю на похожие игры, например 3 в ряд, в любом телефоне границы одинаковы, кубики там к примеру тоже так масштабируются что одинаково выглядят в пропорциях, менюшки и т.д. с относительно равными границами в соотношении...
А у меня вот получается по разному, никак не пойму как оно правильно должно строится...
Есть несколько решений того что вам нужно, главное понять как это работает.
Можно подгонять размер камеры автоматически отталкиваясь от размера макета.
Накиньте это на камеру, тут описано для портретной ориентации.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public int Mobile = 640;
public int Tablet = 852;
void Start()
{
if (Camera.main.pixelHeight > Camera.main.pixelWidth){
//PORTRAIT
float ratio = (float) Camera.main.pixelHeight/Camera.main.pixelWidth;
if (ratio >= 1.5f)
{
Camera.main.orthographicSize = (float) (Mobile*ratio)/200f;
}
else
{
Camera.main.orthographicSize = (float) (Tablet*ratio)/200f;
}
}
else
{
//LANDSCAPE
float ratio = (float) Camera.main.pixelWidth/Camera.main.pixelHeight;
if (ratio >= 1.5f)
{
Camera.main.orthographicSize = (float) Mobile/200f;
}
else
{
Camera.main.orthographicSize = (float) Tablet/200f;
}
}
}
}
Для UI настроить канвас по аналогии.
Canvas - Render Mode - Screen Space - Camera
Перетащить в поле свою камеру.
Canvas - Render Mode - Render Camera - Main Camera (Camera)
Canvas Scaler - UI Scale Mode - Scale Width Screen Size
Canvas Scaler - Reference Rezolution - x640 - y 1136
Canvas Scaler - Match - 0
Canvas Scaler - Reference Pixels Per Unit - 100
И на канвас повесить скрипт:
Он будет немного зумить исходя из его настроек:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class canvasController : MonoBehaviour
{
private int mobile = 640;
private int tablet = 852;
private void Start()
{
Camera _camera = Camera.main;
float aspect = (float) _camera.pixelHeight/_camera.pixelWidth;
//--------------------------------------------------------------------------
Canvas _canvas = this.GetComponent<Canvas>();
_canvas.renderMode = RenderMode.ScreenSpaceCamera;
_canvas.worldCamera = _camera;
//--------------------------------------------------------------------------
if (aspect >= 1.5f)
{
GetComponent<CanvasScaler>().referenceResolution = new Vector2(mobile, mobile*_camera.pixelHeight/_camera.pixelWidth);
}
else
{
GetComponent<CanvasScaler>().referenceResolution = new Vector2(tablet, tablet*_camera.pixelHeight/_camera.pixelWidth);
}
}
}
Вот как это в живую выглядит у меня: Телефон и Планшет