Unity oyunlarını büyük ekranlar ve katlanabilir cihazlar için optimize etme

1. Giriş

Bu codelab'de, bir Unity Android oyununu büyük ekranlı ve katlanabilir cihazlar için nasıl optimize edeceğinizi öğreneceksiniz. En boy oranı desteğini uygulamak, tam ekran kullanımını genişletmek ve katlanabilir cihaz durumlarına yanıt vermek için Lost Crypt örnek projesini kullanacaksınız.

Ön koşullar

  • Unity ve Android geliştirme hakkında temel düzeyde bilgi sahibi olmanız gerekir.
  • Tabletler veya katlanabilir telefonlar gibi büyük ekranlı Android cihazlar

Öğrenecekleriniz

  • Çeşitli en-boy oranları için destek uygulama
  • Oyununuzun kullanıcı arayüzü ve kamera ayarlarında ekran boyutuna otomatik olarak uyum sağlamak için tutturucuları kullanma
  • Cihazın katlanma şeklini algılamak ve düzeni ayarlamak için Android'in Jetpack Window Manager'ını kullanma

İhtiyacınız olanlar

  • Unity Hub ve Editor: Unity 2020 LTS veya Unity 2022'nin Android derleme desteği ile birlikte yüklü olması gerekir.
  • Donanım: Tabletler veya katlanabilir telefonlar gibi büyük ekranlı Android cihazlar.
  • Beceri kullanmayı planlıyorsanız Google Antigravity gibi bir ajan tabanlı geliştirme platformu.

2. Ajan becerisi

İsteğe bağlı olarak, Unity oyun projenizi değerlendirmek için bir ajan becerisi kullanılabilir. Bu beceri, yeniden boyutlandırılabilirlik, büyük ekran ve katlanabilir cihaz desteği eklemenize yardımcı olur. Daha fazla bilgi için: GitHub

Bu beceriyi kullanmak için:

  1. SKILL.md dosyasını temsilci dizininize kopyalayın. Beceri ekleme hakkında daha fazla bilgi için Google Antigravity'yi kullanmaya başlama başlıklı makaleyi inceleyin.
  2. Antigravity gibi bir Agentic IDE'de temsilcinize büyük ekranlar, katlanabilir cihazlar veya yeniden boyutlandırma ile ilgili sorular sorun.
  3. Temsilciden büyük ekranlar ve katlanabilir cihazlar için destek eklemesini isteyin.

3. En-Boy Oranı Desteği

Oyununuzun farklı ekran boyutlarında doğru şekilde görünmesini sağlamak için öncelikle çeşitli en-boy oranları için destek uygulayın. Farklı ekranlara daha iyi uyum sağlamak için kamera veya tuval en-boy oranını ayarlayabilirsiniz.

  1. Uygulamanızın tam ekran yeniden boyutlandırılabilir ayarını kullandığından emin olun.
  2. AndroidManifest.xml işletmenizde (Assets/Plugins/Android/AndroidManifest.xml konumunda):
    1. android:resizeableActivity="true" kümesi.
    2. android:screenOrientation="fullSensor" kümesi.

Örneğin:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity.lostcryptlargescreenexample.LargeScreenPlayableActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:screenOrientation="fullSensor"
                  android:launchMode="singleTask"
                  android:resizeableActivity="true"
                  android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
                  android:hardwareAccelerated="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>
  1. Android platform yapılandırmaları için Unity'deki Build Settings'inizi (Derleme Ayarları) kontrol edin.

Not: Çeşitli en-boy oranlarını desteklemek, oyununuzun tabletlerde ve katlanabilir cihazlarda harika görünmesini sağlamanın ilk adımıdır.

4. Tam Ekran Kullanımı

Farklı en boy oranlarına uyum sağladıktan sonra, oyununuzun oynanabilirliği daha etkileyici hale getirmek için ekranın tamamını kullandığından emin olun.

Ekranın tamamını kullanmak için:

  1. Oyununuzun kullanıcı arayüzünde ve kamera ayarlarında tutturucular kullanın. Bu sayede kullanıcı arayüzü öğeleri, ekran boyutuna göre konumlarını otomatik olarak ayarlayabilir.
  2. Kullanıcı arayüzü kanvası sabitlemenin nasıl ayarlandığını görmek için örnek projede Sabitleme sahnesini açın.
  3. Sabitleme sahnesinde, tuval güvenli çerçeveye uygun şekilde güncellenir ve hareket kontrolleri ekranın köşelerine sabitlenir.

Ana kameranızın en boy oranını korumak için kameranın pixelRect değerini dinamik olarak ayarlayın. CameraAspectLock.cs komut dosyası, yön değişikliklerine nasıl yanıt verileceğini ve kamera görünümüne nasıl sinemaskop efekti uygulanacağını gösterir:

[SerializeField]
private float minAspectRatio = 4f / 3f;

[SerializeField]
private float maxAspectRatio = 21f / 9f;

public void MaintainAspectRatio() {
    int viewWidth = Display.main.systemWidth;
    int viewHeight = Display.main.systemHeight;

    // 1. Calculate screen aspect ratio
    float scaleScreen = viewWidth / (float)viewHeight;
    Rect rect = _camera.pixelRect;

    // 2. Scale to the fullest of the lower between width or height
    if (scaleScreen > maxAspectRatio) {
        // use height, lock width to max at aspect scale
        rect.width = viewHeight * maxAspectRatio;
        rect.height = viewHeight;
    } else if (scaleScreen < minAspectRatio) {
        // use width, lock height to min at aspect scale
        rect.width = viewWidth;
        rect.height = viewWidth / minAspectRatio;
    } else {
        // within allowed aspect ratio range, use full screen
        rect.width = viewWidth;
        rect.height = viewHeight;
    }

    // make sure to center the rect within the window
    rect.x = Mathf.Floor((viewWidth - rect.width) * 0.5f);
    rect.y = Mathf.Floor((viewHeight - rect.height) * 0.5f);

    Debug.Log("camera view width = " + rect.width +
        " height = " + rect.height +
        " x = " + rect.x +
        " y = " + rect.y);

    // 3. Commit the new size to the camera so that it takes effect
    _camera.pixelRect = rect;
}

5. Katlanabilir cihaz desteği

Katlanabilir cihazlarda oyununuzun düzenini, cihazın katlanma şekline (ör. HALF_OPENED, FLAT) ve ekran boyutuna göre anında ayarlamanız gerekir.

  1. Cihazın durumunu algılamak için Android'in Jetpack Window Manager'ını kullanın.
  2. Örnek projede HingeAware sahnesini açın.
  3. Bu sahnede, Android'in Jetpack WindowManager etkinliklerini Unity'ye bağlayan ve UnityEvent geri çağırmaları aracılığıyla katlama durumlarına yanıt veren bir ConfigurationManager MonoBehaviour bulunur.
  4. HingeSensor.cs, com.unity.lostcryptlargescreenexample.HingeAngleSensor Java eklentisini kullanarak menteşe açısını okur.

ConfigurationManager'ı kullanma

ConfigurationManager.cs, özel bir Android etkinliğiyle iletişim kurar ve durumu temsil eden JSON dizelerini ayrıştırır. Android etkinliğinden onConfigurationChanged ve onFoldChanged geri çağırmalarını dinler.

[System.Serializable]
public class FoldInfo {
	public string orientation;
	public string state;
	public int isSeparating;
	public int boundsLeft;
	public int boundsTop;
	public int boundsRight;
	public int boundsBottom;
}

public void onFoldChanged(string strFoldInfo) {
	FoldInfo info = JsonUtility.FromJson<FoldInfo>(strFoldInfo);

	// Always call the refresh from the main Unity thread
	StartCoroutine(ExecuteOnMainUnityThread(ActionOnFoldChange, info));
}

Ayrıca, getFoldableState özelliğini kullanarak durumu senkron olarak da sorgulayabilirsiniz:

public static string getFoldableState {
	get {
		if (Application.platform == RuntimePlatform.Android) {
			var foldingFeatureObject = foldablePlayerActivity.Call<AndroidJavaObject>("getFoldingFeature");
			if (foldingFeatureObject != null) {
				var state = foldingFeatureObject.Call<AndroidJavaObject>("getState");
				return state.Call<string>("toString");
			}
		}
		return "NONE";
	}
}

6. HingeSensor'u kullanma

Bazı katlanabilir cihazlarda, katlama açısını tam olarak (0 ila 360 derece) sağlayan fiziksel bir menteşe sensörü bulunur. Bunu, oyun mekaniklerini yönlendirmek veya kamerayı ayarlamak için kullanabilirsiniz.

HingeSensor.cs'da, donanım sensörünü okumak için bir Android eklentisi başlatılır. Ayrıca, menteşenin etkin olup olmadığını da kontrol edebilirsiniz:

public class HingeSensor : IDisposable {
	AndroidJavaObject plugin;

	public static HingeSensor Start() {
		if (Application.platform == RuntimePlatform.Android) {
			return OnPlayer.Run(p => {
				var context = p.GetStatic<AndroidJavaObject>("currentActivity");
				var plugin = new AndroidJavaClass("com.unity.lostcryptlargescreenexample.HingeAngleSensor")
						.CallStatic<AndroidJavaObject>("getInstance", context);

				if (plugin != null) {
					plugin.Call("setupSensor");
					return new HingeSensor(plugin);
				}
				return null;
			});
		}
		return null;
	}

	public float GetHingeAngle() {
		return (Application.platform == RuntimePlatform.Android && plugin != null) ? plugin.Call<float>("getHingeAngle") : -1.0f;
	}

	public bool IsHingeEnabled() {
		return Application.platform == RuntimePlatform.Android && plugin != null && plugin.Call<int>("isHingeEnabled") > 0;
	}
}

Not: Uygulamanız duraklatıldığında veya yok edildiğinde pilin boşalmasını önlemek için HingeSensor örneğinizde Dispose() veya StopSensing() işlevini çağırdığınızdan emin olun.

7. AAB dosyası oluşturma

Unity Editor'da AAB dosyası oluşturmak için aşağıdaki adımları uygulayın:

  1. Unity Düzenleyicisi'nde File > Build settings'i (Dosya > Derleme ayarları) tıklayın.
  2. Build App Bundle ( Google Play )'i (Uygulama Paketi Oluştur (Google Play)) seçin.Daha fazla bilgi için Android Build Settings reference (Android Derleme Ayarları referansı) başlıklı makaleyi inceleyin.
  3. Build'ı (Derle) tıklayın.
  4. AAB dosyasını Unity Editor'dan indirin.

Dahili test sürümü oluşturma

Play Console'da dahili test sürümü oluşturmak ve test kullanıcıları eklemek için aşağıdaki adımları uygulayın:

  1. Google Play Console'da bir oyun seçin.
  2. Test etme ve yayınlama sayfasına (Test> Dahili test) gidin.
  3. Yükle'yi tıklayın ve AAB dosyasını seçin.
  4. Yayın ayrıntıları alanına bir ad girin.
  5. Sonraki'yi tıklayın ve yayın ayrıntılarını inceleyin.
  6. Kaydet ve yayınla'yı tıklayın.

8. Projeyi oluşturma ve çalıştırma

Artık projeyi oluşturmaya ve cihazınızda test etmeye hazırsınız.

  1. Oyunun açık olduğundan emin olun.
  2. Play Console'da Dosya > Derleme Profili (veya Derleme Ayarları)'na gidin.
  3. Play Console'a yüklemek istiyorsanız Build App Bundle (Google Play) seçeneğinin işaretli olduğundan emin olun veya doğrudan bağlı cihazınıza dağıtmak için Build and Run'ı (Oluştur ve Çalıştır) tıklayın.
  4. Katlanabilir cihazları doğrulayın. Oyununuzun düzenini, cihazın katlanma şekline (ör. HALF_OPENED, FLAT) ve ekran boyutuna göre anında ayarlamanız gerekir.

9. Tebrikler

Unity Android oyununu büyük ekranlara ve katlanabilir cihazlara uyarlama ilkelerini başarıyla öğrendiniz.

Anket

Bu codelab ile ilgili geri bildiriminiz bizim için çok değerli. Birkaç dakikanızı ayırarak anketimizi doldurabilirsiniz.