बड़ी स्क्रीन और फ़ोल्डेबल डिवाइसों के लिए Unity गेम को ऑप्टिमाइज़ करना

1. परिचय

इस कोडलैब में, आपको बड़ी स्क्रीन और फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए, Unity Android गेम को ऑप्टिमाइज़ करने का तरीका बताया जाएगा. आस्पेक्ट रेशियो के साथ काम करने की सुविधा लागू करने, फ़ुल स्क्रीन का ज़्यादा से ज़्यादा इस्तेमाल करने, और फ़ोल्ड किए जा सकने वाले डिवाइसों की स्थितियों के हिसाब से काम करने के लिए, Lost Crypt सैंपल प्रोजेक्ट का इस्तेमाल करें.

ज़रूरी शर्तें

  • Unity और Android डेवलपमेंट की बुनियादी जानकारी.
  • बड़ी स्क्रीन वाले Android डिवाइस, जैसे कि टैबलेट या फ़ोल्ड किए जा सकने वाले फ़ोन.

आपको ये सब सीखने को मिलेगा

  • अलग-अलग आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के लिए सहायता कैसे लागू करें.
  • स्क्रीन के साइज़ के हिसाब से अपने-आप अडजस्ट होने के लिए, गेम के यूज़र इंटरफ़ेस (यूआई) और कैमरे की सेटिंग में ऐंकर का इस्तेमाल कैसे करें.
  • डिवाइस के फ़ोल्ड होने की स्थिति का पता लगाने और लेआउट को अडजस्ट करने के लिए, Android के Jetpack Window Manager का इस्तेमाल कैसे करें.

आपको इन चीज़ों की ज़रूरत पड़ेगी

  • Unity Hub और Editor: Unity 2020 LTS या Unity 2022 इंस्टॉल होना चाहिए. साथ ही, Android बिल्ड सपोर्ट होना चाहिए.
  • हार्डवेयर: बड़ी स्क्रीन वाले Android डिवाइस, जैसे कि टैबलेट या फ़ोल्ड किए जा सकने वाले फ़ोन.
  • अगर आपको स्किल का इस्तेमाल करना है, तो Google Antigravity जैसे एजेंटिक डेवलपमेंट प्लैटफ़ॉर्म का इस्तेमाल करें.

2. एजेंट की स्किल

आपके पास अपने Unity गेम प्रोजेक्ट का आकलन करने के लिए, एजेंट की किसी स्किल का इस्तेमाल करने का विकल्प होता है. इस स्किल की मदद से, साइज़ बदलने की सुविधा जोड़ी जा सकती है. साथ ही, बड़ी स्क्रीन और फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए भी सहायता जोड़ी जा सकती है. ज़्यादा जानकारी के लिए, GitHub देखें

इस स्किल का इस्तेमाल करने के लिए:

  1. SKILL.md फ़ाइल को अपने एजेंट की डायरेक्ट्री में कॉपी करें. कोई स्किल जोड़ने के तरीके के बारे में ज़्यादा जानने के लिए, Google Antigravity का इस्तेमाल शुरू करना लेख पढ़ें.
  2. Antigravity जैसे अपने एजेंटिक आईडीई में, एजेंट को बड़ी स्क्रीन, फ़ोल्ड किए जा सकने वाले डिवाइसों या साइज़ बदलने से जुड़े सवाल पूछें.
  3. एजेंट से बड़ी स्क्रीन और फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए सहायता जोड़ने के लिए कहें.

3. आस्पेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी सुविधा

यह पक्का करने के लिए कि आपका गेम अलग-अलग स्क्रीन साइज़ पर सही तरीके से दिखे, अलग-अलग आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के लिए सपोर्ट लागू करें. अलग-अलग स्क्रीन पर बेहतर तरीके से फ़िट करने के लिए, कैमरा या कैनवस के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को अडजस्ट किया जा सकता है.

  1. पक्का करें कि आपका ऐप्लिकेशन, फ़ुल स्क्रीन मोड में इस्तेमाल किया जा सकता हो और उसका साइज़ बदला जा सकता हो.
  2. अपनी AndroidManifest.xml में (Assets/Plugins/Android/AndroidManifest.xml पर मौजूद):
    1. android:resizeableActivity="true" सेट करें.
    2. android:screenOrientation="fullSensor" सेट करें.

उदाहरण के लिए:

<?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 प्लैटफ़ॉर्म कॉन्फ़िगरेशन के लिए, Unity में बिल्ड सेटिंग देखें.

ध्यान दें: अलग-अलग आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के साथ काम करने की सुविधा, टैबलेट और फ़ोल्ड किए जा सकने वाले डिवाइसों पर गेम को बेहतर बनाने का पहला चरण है.

4. फ़ुल स्क्रीन का इस्तेमाल

अलग-अलग आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के हिसाब से गेम को अडजस्ट करने के बाद, पक्का करें कि गेमप्ले को ज़्यादा दिलचस्प बनाने के लिए, गेम पूरी स्क्रीन का इस्तेमाल करता हो.

पूरी स्क्रीन का इस्तेमाल करने के लिए:

  1. अपने गेम के यूज़र इंटरफ़ेस (यूआई) और कैमरे की सेटिंग में ऐंकर का इस्तेमाल करें. इससे यूज़र इंटरफ़ेस (यूआई) एलिमेंट, स्क्रीन के साइज़ के हिसाब से अपनी जगह अपने-आप बदल लेते हैं.
  2. यूज़र इंटरफ़ेस (यूआई) कैनवस ऐंकरिंग को सेट अप करने का तरीका जानने के लिए, उदाहरण प्रोजेक्ट में ऐंकरिंग सीन खोलें.
  3. ऐंकरिंग सीन में, कैनवस को अपडेट किया जाता है, ताकि वह सेफ़-फ़्रेम के बारे में जान सके. साथ ही, मूवमेंट कंट्रोल को स्क्रीन के कोनों पर ऐंकर किया जाता है.

मुख्य कैमरे के आसपेक्ट रेशियो को बनाए रखने के लिए, कैमरे के pixelRect को डाइनैमिक तरीके से अडजस्ट करें. CameraAspectLock.cs स्क्रिप्ट में, ओरिएंटेशन में हुए बदलावों के हिसाब से कैमरे के व्यू को लेटरबॉक्स करने का तरीका बताया गया है:

[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. फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए सहायता

फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए, आपको डिवाइस के फ़ोल्डिंग पोस्चर (जैसे, HALF_OPENED, FLAT) और स्क्रीन के साइज़ के हिसाब से, गेम के लेआउट को तुरंत अडजस्ट करना चाहिए.

  1. डिवाइस की स्थिति का पता लगाने के लिए, Android के Jetpack Window Manager का इस्तेमाल करें.
  2. उदाहरण के तौर पर दिए गए प्रोजेक्ट में, HingeAware सीन खोलें.
  3. इस सीन में ConfigurationManager MonoBehaviour शामिल है. यह Android के Jetpack WindowManager इवेंट को Unity से जोड़ता है. साथ ही, UnityEvent कॉलबैक के ज़रिए फ़ोल्डिंग की स्थितियों का जवाब देता है.
  4. HingeSensor.cs, com.unity.lostcryptlargescreenexample.HingeAngleSensor Java प्लगिन का इस्तेमाल करके, हिंज के ऐंगल को पढ़ता है.

ConfigurationManager का इस्तेमाल करना

ConfigurationManager.cs, Android की कस्टम गतिविधि से कम्यूनिकेट करता है और स्थिति को दिखाने वाली JSON स्ट्रिंग को पार्स करता है. यह Android ऐक्टिविटी से onConfigurationChanged और onFoldChanged कॉलबैक को सुनता है.

[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));
}

getFoldableState प्रॉपर्टी का इस्तेमाल करके, स्थिति के बारे में सिंक्रोनस तरीके से भी क्वेरी की जा सकती है:

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 का इस्तेमाल करना

फ़ोल्ड किए जा सकने वाले कुछ डिवाइसों में, फ़िज़िकल हिंज सेंसर होता है. यह सेंसर, डिवाइस के फ़ोल्ड होने के सटीक कोण (0 से 360 डिग्री) की जानकारी देता है. इसका इस्तेमाल, गेमप्ले के तरीके को बेहतर बनाने या कैमरे को अडजस्ट करने के लिए किया जा सकता है.

HingeSensor.cs में, हार्डवेयर सेंसर से डेटा पढ़ने के लिए Android प्लगिन को शुरू किया जाता है. यह भी देखा जा सकता है कि हिंज की सुविधा चालू है या नहीं:

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;
	}
}

ध्यान दें: जब आपका ऐप्लिकेशन रुक जाए या बंद हो जाए, तो बैटरी खत्म होने से रोकने के लिए, अपने HingeSensor इंस्टेंस पर Dispose() या StopSensing() को कॉल करना न भूलें.

7. AAB फ़ाइल बनाना

Unity Editor में AAB फ़ाइल बनाने के लिए, यह तरीका अपनाएं:

  1. Unity Editor में, File > Build settings पर क्लिक करें.
  2. Build App Bundle ( Google Play ) को चुनें.ज़्यादा जानकारी के लिए, Android Build Settings का रेफ़रंस देखें.
  3. बनाएं पर क्लिक करें.
  4. Unity Editor से AAB फ़ाइल डाउनलोड करें.

इंटरनल टेस्टिंग के लिए रिलीज़ बनाना

Play Console में इंटरनल टेस्टिंग रिलीज़ बनाने और टेस्टर जोड़ने के लिए, यह तरीका अपनाएं:

  1. Google Play Console में जाकर कोई गेम चुनें.
  2. टेस्ट और रिलीज़ पेज (टेस्टिंग > इंटरनल टेस्टिंग) पर जाएं.
  3. अपलोड करें पर क्लिक करें और AAB फ़ाइल चुनें.
  4. रिलीज़ की जानकारी फ़ील्ड में, कोई नाम डालें.
  5. आगे बढ़ें पर क्लिक करें और रिलीज़ की जानकारी देखें.
  6. सेव करें और पब्लिश करें पर क्लिक करें.

8. प्रोजेक्ट को बिल्ड और रन करना

अब प्रोजेक्ट बनाया जा सकता है और उसे अपने डिवाइस पर टेस्ट किया जा सकता है.

  1. पक्का करें कि आपने गेम खोला हो.
  2. Play Console में, फ़ाइल > बिल्ड प्रोफ़ाइल (या बिल्ड सेटिंग) पर जाएं.
  3. अगर आपको Play Console पर अपलोड करना है, तो पक्का करें कि ऐप्लिकेशन बंडल बनाएं (Google Play) पर सही का निशान लगा हो. इसके अलावा, कनेक्ट किए गए डिवाइस पर सीधे तौर पर डिप्लॉय करने के लिए, बनाएं और चलाएं पर क्लिक करें.
  4. फ़ोल्ड किए जा सकने वाले डिवाइसों की पुष्टि करें. आपको डिवाइस के फ़ोल्डिंग पोस्चर (उदाहरण के लिए, HALF_OPENED, FLAT) और स्क्रीन के साइज़ के हिसाब से, गेम के लेआउट को तुरंत अडजस्ट करना चाहिए.

9. बधाई हो

आपने बड़ी स्क्रीन और फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए, Unity Android गेम को अडैप्ट करने के सिद्धांतों के बारे में जान लिया है!

सर्वे

इस कोडलैब के बारे में आपका सुझाव, शिकायत या राय हमारे लिए बहुत अहम है. कृपया कुछ समय निकालकर, हमारे सर्वे में हिस्सा लें.