बड़ी स्क्रीन के साइज़ में बदलाव करने की सुविधा मिलती है

गेम के लिए, बड़ी स्क्रीन वाले साइज़ के अलग-अलग नाप या आकार वाले डिवाइसों का इस्तेमाल करने पर, यह पता चलता है कि आपका गेम, विंडो मैनेजमेंट को कैसे मैनेज करता है. ChromeOS और Google Play Games on PC पर, आपका गेम विंडो वाले मोड में खेला जा सकता है. हालांकि, यह डेस्कटॉप के मुख्य इंटरफ़ेस पर काम करता है. Android 12L (एपीआई लेवल 32) या उसके बाद के वर्शन वाले नए Android टैबलेट और फ़ोल्ड किए जा सकने वाले डिवाइसों पर, जिनकी स्क्रीन की चौड़ाई > 600dp में, आपके गेम अन्य ऐप्लिकेशन के साथ स्प्लिट-स्क्रीन मोड में साथ-साथ चल सकते हैं और उनका साइज़ भी बदला जा सकता है. साथ ही, फ़ोल्ड किए जा सकने वाले डिवाइसों पर इनर और आउटर डिसप्ले के बीच भी स्विच किया जा सकता है. इससे विंडो के साइज़ और कुछ डिवाइसों की स्क्रीन की दिशा के कॉन्फ़िगरेशन में बदलाव हो सकता है.

Unity गेम की मदद से साइज़ बदलना

बड़ी स्क्रीन का सामान्य कॉन्फ़िगरेशन

बताएं कि आपका गेम, साइज़ बदलने की सुविधा को मैनेज कर सकता है या नहीं:

<android:resizeableActivity="true" or "false" />

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

<!-- Render full screen between 3:2 and 21:9 aspect ratio -->
<!-- Let the platform letterbox otherwise -->
<activity android:minAspectRatio="1.5">
<activity android:maxAspectRatio="2.33">

Google Play Games on PC

Google Play Games on PC के लिए, यह प्लैटफ़ॉर्म बताए गए आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के हिसाब से, विंडो को छोटा या बड़ा करता है. विंडो का साइज़, सबसे सही डाइमेंशन के हिसाब से अपने-आप लॉक हो जाता है. अगर आपका गेम पोर्ट्रेट मोड में है, तो आपको आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) कम से कम 16:9 और मुख्य ओरिएंटेशन के तौर पर लैंडस्केप मोड और 9:16 के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) में काम करना होगा. बेहतरीन अनुभव के लिए, लैंडस्केप गेम में 21:9, 16:10, और 3:2 के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की सुविधा साफ़ तौर पर दें. यहां विंडो को साइज़ में बदलने की सुविधा की ज़रूरत नहीं है. हालांकि, अन्य डिवाइस टाइप के साथ काम करने के लिए, इसे इस्तेमाल करना अच्छा है.

ज़्यादा जानकारी और सबसे सही तरीकों के बारे में जानने के लिए, Google Play Games on PC के लिए ग्राफ़िक कॉन्फ़िगर करना लेख पढ़ें.

ChromeOS और Android की बड़ी स्क्रीन वाले डिवाइस

Android डिवाइसों और बड़ी स्क्रीन वाले Android डिवाइसों पर फ़ुल स्क्रीन मोड में अपने गेम को ज़्यादा से ज़्यादा लोगों को दिखाने के लिए, फ़ुल-स्क्रीन इमर्सिव मोड काम करें. साथ ही, decorView पर फ़्लैग सेट करके, सिस्टम यूज़र इंटरफ़ेस (यूआई) दिखने की सेटिंग या WindowInsetsCompat एपीआई की मदद से, सिस्टम बार छिपाएं. ऐसा हो सकता है कि आप कॉन्फ़िगरेशन इवेंट को रोटेशन और साइज़ बदलने के लिए अच्छी तरह से मैनेज करना चाहें या उन्हें ChromeOS डिवाइसों पर होने से रोकना चाहें.

ध्यान दें कि बड़ी स्क्रीन वाले Android डिवाइसों पर, आपका गेम ऐसे कॉन्फ़िगरेशन में चल सकता है जिसे शायद आपने पहले से इस्तेमाल न किया हो. अगर आपका गेम सभी विंडो साइज़ और स्क्रीन की दिशा वाले कॉन्फ़िगरेशन के साथ काम नहीं करता है, तो प्लैटफ़ॉर्म आपके गेम को कंपैटबिलिटी मोड में लेटरबॉक्स करता है. साथ ही, ज़रूरी होने पर, प्लेयर को ऐसे कॉन्फ़िगरेशन पर स्विच करने से पहले सूचना देता है जो इसमें काम नहीं करता.

पहली इमेज. कॉन्फ़िगरेशन के साथ काम करने से जुड़ा डायलॉग.

कुछ डिवाइसों पर, जब कोई खिलाड़ी किसी ऐसे कॉन्फ़िगरेशन पर जाता है जो काम नहीं करता, तो उसे नए विंडो लेआउट के हिसाब से गेम को फिर से लोड करने और गतिविधि को फिर से बनाने के लिए कहा जा सकता है. इससे, गेम खेलने का अनुभव खराब हो सकता है. अलग-अलग मल्टी-विंडो मोड कॉन्फ़िगरेशन (2/3, 1/2, 1/3 विंडो साइज़) में अपने गेम की जांच करें. साथ ही, पुष्टि करें कि कोई गेमप्ले या यूज़र इंटरफ़ेस (यूआई) एलिमेंट, कट ऑफ़ या ऐक्सेस नहीं किया जा सकता. इसके अलावा, यह भी देखें कि फ़ोल्ड किए जा सकने वाले डिवाइसों की इनर और आउटर स्क्रीन के बीच मूव करते समय, गेम आपके डिवाइस पर फ़ोल्ड किए जा सकने वाले डिवाइस का इस्तेमाल कैसे करता है. अगर आपको समस्याएं दिखती हैं, तो इन कॉन्फ़िगरेशन इवेंट को साफ़ तौर पर हैंडल करें. साथ ही, बड़ी स्क्रीन में साइज़ बदलने की बेहतर सुविधा जोड़ें.

बड़ी स्क्रीन को साइज़ में बदलने की बेहतर सुविधा

दूसरी इमेज. डेस्कटॉप पर अलग-अलग यूज़र इंटरफ़ेस (यूआई) और टेबलटॉप पोज़िशन में फ़ोल्ड किए जा सकने वाले डिवाइस.

साथ काम करने वाले मोड से बाहर निकलने और ऐक्टिविटी को फिर से चालू करने से बचने के लिए, ये काम करें:

  1. अपनी मुख्य गतिविधि का साइज़ बदलने की सुविधा के तौर पर एलान करें:

    <android:resizeableActivity="true" />
    
  2. "orientation", "screenSize", "smallestScreenSize", "screenLayout", और "डेंसिटी" के लिए साफ़ तौर पर साथ काम करने की जानकारी दें बड़ी स्क्रीन के सभी कॉन्फ़िगरेशन इवेंट पाने के लिए, अपने गेम मेनिफ़ेस्ट के <activity> एलिमेंट के android:configChanges एट्रिब्यूट में:

    <android:configChanges="screenSize | smallestScreenSize | screenLayout | orientation | keyboard |
                            keyboardHidden | density" />
    
  3. onConfigurationChanged() को ओवरराइड करें और कॉन्फ़िगरेशन इवेंट को हैंडल करें. इसमें मौजूदा ओरिएंटेशन, विंडो का साइज़, चौड़ाई, और ऊंचाई शामिल हैं:

    Kotlin

    override fun onConfigurationChanged(newConfig: Configuration) {
       super.onConfigurationChanged(newConfig)
       val density: Float = resources.displayMetrics.density
       val newScreenWidthPixels =
    (newConfig.screenWidthDp * density).toInt()
       val newScreenHeightPixels =
    (newConfig.screenHeightDp * density).toInt()
    
       // Configuration.ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE
       val newScreenOrientation: Int = newConfig.orientation
    
       // ROTATION_0, ROTATION_90, ROTATION_180, or ROTATION_270
       val newScreenRotation: Int =
    windowManager.defaultDisplay.rotation
    }
    

    Java

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
       super.onConfigurationChanged(newConfig);
       float density = getResources().getDisplayMetrics().density;
       int newScreenWidthPixels = (int) (newConfig.screenWidthDp * density);
       int newScreenHeightPixels = (int) (newConfig.screenHeightDp * density);
    
       // Configuration.ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE
       int newScreenOrientation = newConfig.orientation;
    
       // ROTATION_0, ROTATION_90, ROTATION_180, or ROTATION_270
       int newScreenRotation = getWindowManager().getDefaultDisplay()
               .getRotation();
    }
    

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

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

इसके अलावा, आम तौर पर बड़ी स्क्रीन का मतलब बड़े पिक्सल से होता है, क्योंकि ज़्यादा बड़े क्षेत्र के लिए आपके पास उतने ही पिक्सल होते हैं. इसकी वजह से, छोटे साइज़ के रेंडर बफ़र या कम रिज़ॉल्यूशन वाली ऐसेट के लिए पिक्सलेशन की समस्या हो सकती है. बड़ी स्क्रीन वाले डिवाइसों पर अपनी सबसे अच्छी क्वालिटी वाली ऐसेट का इस्तेमाल करें. साथ ही, गेम की परफ़ॉर्मेंस को बेहतर बनाने के लिए प्रोफ़ाइल का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि उनमें कोई समस्या न हो. अगर आपके गेम में एक से ज़्यादा क्वालिटी लेवल काम करते हैं, तो पक्का करें कि वह बड़ी स्क्रीन वाले डिवाइसों के हिसाब से हो.

एकाधिक विंडो मोड

मल्टी-विंडो मोड की मदद से, एक से ज़्यादा ऐप्लिकेशन एक ही स्क्रीन को एक साथ शेयर कर सकते हैं. मल्टी-विंडो मोड, गतिविधि की लाइफ़साइकल में बदलाव नहीं करता; हालांकि, कई विंडो में फिर से शुरू किए गए ऐप्लिकेशन, Android के अलग-अलग वर्शन पर अलग-अलग हो सकते हैं. मल्टी-विंडो मोड की सुविधा दें में, मल्टी-विंडो मोड में गतिविधि की लाइफ़साइकल देखें.

जब प्लेयर किसी ऐप्लिकेशन या गेम को मल्टी-विंडो मोड में सेट करता है, तो सिस्टम, कॉन्फ़िगरेशन में हुए बदलाव की गतिविधि की सूचना देता है. इस बारे में बड़ी स्क्रीन का साइज़ बदलने की बेहतर सेटिंग सेक्शन में बताया गया है. कॉन्फ़िगरेशन में बदलाव तब भी होता है, जब प्लेयर गेम का साइज़ बदलता है या गेम को वापस फ़ुल-स्क्रीन मोड में डाल देता है.

इस बात की कोई गारंटी नहीं है कि मल्टी-विंडो मोड में इस्तेमाल करने पर, ऐप्लिकेशन फिर से फ़ोकस कर पाएगा. इसलिए, अगर गेम को रोकने के लिए, ऐप्लिकेशन की स्थिति से जुड़े किसी इवेंट का इस्तेमाल किया जाता है, तो गेम को फिर से शुरू करने के लिए, उपयोगकर्ता हासिल करने वाले फ़ोकस इवेंट (onWindowFocusChanged(), जिसकी फ़ोकस वैल्यू सही है) पर भरोसा न करें. इसके बजाय, अन्य इवेंट हैंडलर या स्टेट चेंज हैंडलर जैसे onConfigurationChanged() या onResume() का इस्तेमाल करें. ध्यान दें कि isInMultiWindowMode() तरीके का इस्तेमाल करके, यह पता लगाया जा सकता है कि मौजूदा गतिविधि, मल्टी-विंडो मोड में चल रही है या नहीं.

ChromeOS पर मल्टी-विंडो मोड में, शुरुआती विंडो के डाइमेंशन पर बहुत ज़्यादा ध्यान दिया जाता है. गेम, फ़ुल-स्क्रीन पर होना ज़रूरी नहीं है. ऐसे में, आपको यह एलान करना होगा कि उस स्थिति में विंडो का साइज़ क्या होना चाहिए. इसे ठीक करने के दो तरीके सुझाए गए हैं.

पहला विकल्प, Android मेनिफ़ेस्ट में <layout> टैग पर खास एट्रिब्यूट का इस्तेमाल करके काम करता है. defaultHeight और defaultWidth एट्रिब्यूट, शुरुआती डाइमेंशन को कंट्रोल करते हैं. अपने खिलाड़ियों को गेम विंडो का साइज़ ऐसे डाइमेंशन में बदलने से रोकें जो आपके साथ काम नहीं करते. इसके लिए, minHeight और minWidth एट्रिब्यूट को ध्यान में रखें. आखिर में, gravity एट्रिब्यूट से यह तय होता है कि लॉन्च होने पर विंडो स्क्रीन पर कहां दिखेगी. यहां इन एट्रिब्यूट का इस्तेमाल करके लेआउट टैग का उदाहरण दिया गया है:

<layout android:defaultHeight="500dp"
        android:defaultWidth="600dp"
        android:gravity="top|end"
        android:minHeight="450dp"
        android:minWidth="300dp" />

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

इसके अलावा, अगर Unity या Unreal गेम इंजन का इस्तेमाल किया जा रहा है, तो पक्का करें कि Unity 2019.4.40 और Unreal 5.3 या इसके बाद के वर्शन वाले ऐसे नए वर्शन का इस्तेमाल किया जा रहा हो जो मल्टी-विंडो मोड के साथ काम करता है.

फ़ोल्ड किए जा सकने वाले पॉस्चर सपोर्ट

प्लेयर इमर्ज़न और जुड़ाव को बढ़ाने के लिए, टेबलटॉप जैसे फ़ोल्ड किए जा सकने वाले पोज़िशन को सपोर्ट करने के लिए, Jetpack WindowManager लेआउट लाइब्रेरी का इस्तेमाल करें:

तीसरी इमेज. टेबलटॉप पोज़िशन में गेम, डिसप्ले के वर्टिकल हिस्से में मुख्य व्यू के साथ और हॉरिज़ॉन्टल हिस्से पर कंट्रोल.

Kotlin

fun isTableTopPosture(foldFeature : FoldingFeature?) : Boolean {
    contract { returns(true) implies (foldFeature != null) }
    return foldFeature?.state == FoldingFeature.State.HALF_OPENED &&
            foldFeature.orientation == FoldingFeature.Orientation.HORIZONTAL
}

Java

boolean isTableTopPosture(FoldingFeature foldFeature) {
    return (foldFeature != null) &&
           (foldFeature.getState() == FoldingFeature.State.HALF_OPENED) &&
           (foldFeature.getOrientation() == FoldingFeature.Orientation.HORIZONTAL);
}