Unity3D ile 2D Geliştirmede Ekran Boyutlandırması

Bugün Unity3D içerisinde 2D olarak oyun geliştirirken oyun içerisinde “Sprite” yapılarının her cihazda aynı şekilde görüntülenmesine bakacağız. Genel olarak Android cihazların sayısı oldukça fazla. Bununla birlikte birbirinden farklı ekran çözünürlükleri kullanılıyor. Bu demek oluyor ki, bir oyun yapmaya başladığımız zaman oyunumuz farklı ekran çözünürlüklerinde oynanacak. Örneğin oyunda bir arka plan için bir “Sprite” koyduğumuzda her cihazda yatay ve dikey olarak kaplamasını isteyebiliriz. Yani ekranın sağında ve solunda boşluklar olması ya da altında veya üstünde boşlukların bulunması istenmeyen bir durum oluyor.

Unity3D içerisinde yeni bir sahne oluşturduğumuz zaman bir adet “Main Camera” eklenmiş olarak geliyor. Şimdi o objenin “Camera” bileşenine bakalım.

Yukarıdaki resimde görüldüğü gibi “Projection” seçeneğinde 2 farklı kamera tipi bulunuyor. Bunlardan ilki “Perspective” kamera tipi, bir üçgen prizma şeklinde alanı görüntülüyor ve genellikle 3 boyutlu oyunlar için ideal olan seçenek. Altındaki “Orthographic” kamera tipi ise dikdörtgenler prizması şeklinde bir alanı görüntülüyor ve genellikle 2 boyutlu oyunlar için ideal kamera tipi oluyor. Bizde burada 2 boyut için “Orthographic” tipi seçiyoruz. Seçimi yaptıktan sonra bir alt seçeneği “Size” değerini göreceğiz. Bu “Size” değeri kameranın yükseklik oranının yarısıdır. Yani yükseklik oranımız bu değerin 2 katı olmakta. Bu değeri kod ile düzenleyeceğiz.
Bunun yanında cihazlarda kullanılan en ile boy arasında orantı bulunmaktadır. Örneğin kullandığımız cihaz 720×1280 piksele sahip. Her birini 80’e bölersek 9×16 oranı çıkmaktadır. Bende bu oran üzerinden geliştirme yapıyorum.
Unity3D projesi içerisine bir görsel attığımız zaman ona ait özellikler kısmından öncelikle “Texture Type” değerini “Sprite” yapmamız gerekiyor. Ardından “Pixels Per Unit” değerini 1 olarak kullanıyoruz.

Buradan sonra kodu inceleyelim.

Öncelikle oyundaki “Main Camera” objesini bir “GameObject” üzerine aldık. Bunun sebebi bir kolaylık için konumunu değiştireceğim. Ardından yukarıda bahsettiğimiz “orthographicSize” değerini hesaplamaya gelelim. Tasarımlarda da ben kendi cihazımın genişliği 720 olduğu için bu değeri kullanıyorum. Bununla birlikte oyun dikey ekranlarda olacağı varsayalım. Bunun için 9×16 oranının 1 bölü şeklinde vererek 16*9 oluyor. 2’ye bölme sebebimiz ise bahsetmiştik, değerin yarısı olacak. Son olarak 100 ile çarpıyoruz. Bunun sebebi de x ekseninde 0 ile 1 arasında 100 değer yerleştireceğiz.
Alt satırda “aspect” değerine 9×16 veriyoruz. Sonra 2 değere yüksekliğin ve genişliğin yarısını eşitliyoruz. Daha sonra “Main Camera” objesinin pozisyonunu yüksekliğinin yarısı yapıyoruz. Bunun sebebi ekranın yükseklik değeri olarak negatif değerler ile uğraşmamak siz isterseniz yapmayabilirsiniz. Sonrasında da ekranın sol üst noktasının koordinatlarını hesaplayarak yazalım.

x eksenin de -3.6 oldu. Yani 720/100/2 değerinden elde etmiş olduk. Yükseklik 12.8 oldu 1280/100 değerinden geldi. Dediğim gibi negatif değer ile uğraşmıyoruz burada. Z ekseni ise kameranın konumu 0,0,-10 da başladığı için -10 olarak geldi. Bunun dışında sol alt kenarda -3.8,0,-10 değerine sahip.
Teşekkürler, görüşmek üzere.

“Unity3D ile 2D Geliştirmede Ekran Boyutlandırması” üzerine 3 yorum

    1. Bunun en temel yöntemi şu yolu izlemek, Edit -> Project Settings -> Player Settings. Burada Resolution and Presentation altında bulunan Default Orientation değerini Landspace left ya da Landscape right yapman olur. Bunun sonrasında tasarım boyutlanmasını ona göre kurgulaman gerekecek. Yani örneğin 500×1000 olan bir ekranı artık 1000×500 gibi düşünerek işlemleri yapman gerekecektir.

    2. 1920×1080 için ben şöyle ayarlamıştım.

      GameObject mainCamera = GameObject.Find(“Main Camera”);

      Camera.main.orthographicSize = (1920 * (9f / 16f) / 2) / 100;

      Camera.main.aspect = 16f / 9f;

      float camHalfHeight = Camera.main.orthographicSize;
      float camHalfWidth = Camera.main.aspect * camHalfHeight;

      mainCamera.transform.position = new Vector3(mainCamera.transform.position.x, camHalfHeight, mainCamera.transform.position.z);

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir