एंड्रॉइड के लिए एक एकता गेम को पोर्ट करते समय समस्याओं का समाधान


9

इसलिए, मैं यूनिटी 3 डी में पहली बार एंड्रॉइड के लिए एक गेम पोर्ट कर रहा हूं। और मैं रास्ते में कुछ समस्याओं के लिए भाग रहा हूँ। मेरी वर्तमान समस्या यह है कि रिज़ॉल्यूशन सही प्रतीत नहीं होता है, यह स्क्रीन के किनारों को काट देता है और स्क्रीन को बाएं / दाएं स्क्रॉल करने के लिए मेरी स्क्रॉलिंग बंद हो जाती है जो अब सही जगह पर नहीं हैं।

थोड़ा शोध करने के बाद, बहुत से लोग कहते हैं कि आपको अपने गेम रिज़ॉल्यूशन को स्वतंत्र बनाने की आवश्यकता है ताकि सभी Android / Iphone / Ipad पर चलने में सक्षम हो सकें। क्या ये सच है? यदि हां, तो मैं इसे कैसे करूं? यदि नहीं, तो जब मैं मोबाइल उपकरणों पर पोर्ट करता हूं, तो मैं इसे ठीक करने में मदद कैसे कर सकता हूं?

संपादित करें: मुझे अभी भी वास्तव में मेरी ज़रूरत नहीं है, संकल्प अभी भी नीचे सूचीबद्ध कोड और ट्रिक्स के साथ ठीक से काम नहीं कर रहे हैं। मुझे डिवाइस के आधार पर समायोजित करने के लिए संकल्प के लिए किसी तरह की आवश्यकता है। किसी कारण से जब मैं मुंगोइड के कोड का उपयोग करके किसी डिवाइस के रिज़ॉल्यूशन को पुनः प्राप्त करने का प्रयास करता हूं, तो यह 0x0 देता है


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

जहां तक ​​बारीकियों की बात है, यह सवाल कुछ विस्तार में है (साइट पर इसके बारे में बहुत सारे सवाल हैं) gamedev.stackexchange.com/questions/51/…
Tetrad

आह, तो मूल रूप से नमर ने क्या कहा: "सुनिश्चित करें कि आप सब कुछ अनुपात के साथ करते हैं। उदाहरण के लिए एक स्वास्थ्य पट्टी स्क्रीन चौड़ाई के 80% पर स्क्रीन चौड़ाई के 10% के साथ अपने क्षैतिज पैमाने के लिए रखा जाएगा" तो मैं कैसे संदर्भ को ठीक कर सकता हूं अंतरिक्ष में विशिष्ट क्षेत्र? मेरी स्क्रीन स्क्रॉलिंग विश्व अंतरिक्ष में विशिष्ट क्षेत्रों पर आधारित है, लेकिन ऐसा लगता है कि रिज़ॉल्यूशन परिवर्तन के साथ गड़बड़ हो गई है।
टिमोथी विलियम्स

क्या आप अपनी समस्या के बारे में अधिक विशिष्ट हो सकते हैं? आप कहते हैं कि रिज़ॉल्यूशन "सही प्रतीत नहीं होता है" और यह "अभी भी बंद" है - लेकिन स्क्रीन रिज़ॉल्यूशन आमतौर पर डिवाइस की एक निश्चित संपत्ति है। तो यह संकल्प नहीं है जो गलत है, लेकिन जिस तरह से आप स्क्रीन को प्रस्तुत करते हैं। यदि आप यह अनुमान लगाते हैं कि स्क्रीन कितनी चौड़ी और ऊँची है, तो आपको हमेशा विभिन्न उपकरणों और पहलू अनुपातों में परेशानी होगी।
काइलोटन

मुझे वास्तव में लगता है कि मैं जो करने की कोशिश कर रहा हूं, वह सबसे कम रिज़ॉल्यूशन खोजने के लिए एक कोड लिख रहा है, गेम को उस पर सेट करें, और तदनुसार सभी वस्तुओं को स्केल करें। मुझे पता है कि प्लेफ़ील्ड के पैमाने को कैसे सेट किया जाए, लेकिन मैं डिवाइस का रिज़ॉल्यूशन प्राप्त नहीं कर सकता। इसलिए खेल "बहुत ज़ूम इन" या सब कुछ बहुत बड़ा है।
टिमोथी विलियम्स

जवाबों:


7

एक समस्या जो आप एंड्रॉइड के साथ चलाएंगे वह यह है कि हर अलग डिवाइस का अपना स्क्रीन आकार, रिज़ॉल्यूशन और पिक्सेल घनत्व है। यदि आप चाहते हैं कि आपका खेल सभी उपकरणों पर समान दिखे, तो आप बहुत काम में हैं और शायद कभी भी परिणाम से प्रसन्न नहीं होंगे। या तो गेम वाइडस्क्रीन डिस्प्ले पर फैला हुआ दिखाई देगा या फिर गैर-वाइडस्क्रीन वाले पर संकुचित होगा। मेरा सुझाव है कि आप तय करें कि वास्तव में क्या महत्वपूर्ण है और किसी भी चीज़ को थोड़ा और स्लाइड करें।

किसी भी स्क्रीनशॉट या आपके खेल के बारे में ज्ञान के बिना और यह कैसा दिखता है, हम सभी समाधानों का अनुमान लगा सकते हैं, लेकिन हमारे पास आपको विशिष्ट परामर्श देने के लिए कोई विशिष्ट दिशा नहीं है।

एकता में, आप स्क्रीन वर्ग के साथ वर्तमान स्क्रीन के आयामों तक पहुंच सकते हैं : Screen.widthऔर Screen.height(अन्य गुणों के बीच)। फिर आप स्क्रीन के आयामों के आधार पर अपने अलग-अलग आकार के स्क्रीन पर जो दिखाई दे रहे हैं उसे बदलने के लिए कैमरा के पहलू अनुपात को बदल सकते हैं और जो दिखाई देनी चाहिए उसकी आपकी व्यक्तिगत अपेक्षा।

यदि आपको यह सुनिश्चित करने की आवश्यकता है कि किसी भी HUD डिस्प्ले को ठीक से स्केल किया गया है, तो आप ऐसा कर सकते हैं कि हर फ़ंक्शन में स्क्रीन के आयामों के आधार पर GUI ट्रांसफ़ॉर्म मैट्रिक्स को बदलकर OnGUI()। मैंने इसे इस सरल स्क्रिप्ट को बनाने से पहले किया है और इसे किसी भी चीज से जोड़ दिया है जो GUI तत्वों को प्रदान करता है जिसे मैं स्केल किया गया था:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

फिर, वास्तविक OnGUI()फ़ंक्शन में, मैंने तुरंत ट्रांसफ़ॉर्म मैट्रिक्स सेट किया:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}

स्क्रीन की चौड़ाई और ऊंचाई के आधार पर कैमरे के पहलू अनुपात को सेट करने में मदद नहीं मिलती है, जब फोन लंबवत होता है तो यह बिल्कुल नहीं दिखाता है और जब फोन क्षैतिज होता है तो यह पहले जैसा ही दिखाता है। खेल को तीन खंडों में विभाजित किया गया है, आप अपनी उंगली के साथ वर्गों के बीच स्क्रॉल करें (जैसे एंग्री बर्ड्स में), यहां बाईं ओर जैसा दिखने वाला है , उसकी एक तस्वीर है। और बीच का । यहाँ बाईं ओर है जब मेरा फोन लंबवत रखा गया है ,
टिमोथी विलियम्स

और यहाँ क्षैतिज है । उम्मीद है कि ये तस्वीरें मदद कर सकती हैं, यह मेरा पहली बार यूनिटी से एंड्रॉइड के लिए पोर्टिंग है, या यहां तक ​​कि एंड्रॉइड गेम बना रहा है। मैं थोड़ा खोया हुआ हूं।
टिमोथी विलियम्स

आपके स्पष्टीकरण और आपके चित्रों की (मेरी व्याख्या) को देखते हुए, समस्या समाधान नहीं है; आपका कैमरा किसी ऐसे स्थान पर नहीं है जो संभवतः आपको वह सब कुछ दिखा सके जो आप छोटे पर्दे पर चाहते हैं। अपने स्तर को छोटा करें या अधिक या कुछ दिखाने के लिए अपने कैमरे को वापस ले जाएं। मेरा सुझाव है कि आपके गेम विंडो को बहुत छोटे आकार में सेट करने का आकार 1230x530ish आकार के बजाय एक वास्तविक डिवाइस का प्रतिनिधित्व करने के लिए है ताकि अब आप इसे देखने के लिए महसूस कर सकें।
अराजकतावादी

समस्या यह है कि मैंने पहले ही कैमरे को काफी हद तक ज़ूम आउट कर दिया है। यदि यह समस्या लगातार बनी रहेगी, तो मैं विभिन्न स्क्रीन और साइज़ का सही-सही हिसाब कैसे लगा सकता हूँ?
टिमोथी विलियम्स

@TimothyWilliams, आप शायद एक न्यूनतम रिज़ॉल्यूशन (800x600 या ऐसा कुछ) चुनकर काम कर सकते हैं, जिसके साथ आपका गेम काम करता है। फिर, उपयोग Screen.widthऔर .heightके साथ मिलकर Camera.fieldOfViewऔर Camera.aspectमनमाने ढंग से स्क्रीन आकार पर एक ही दृश्य को पुन: पेश करने के लिए। यह सिर्फ विशेष रूप से कैसे करना है बाहर काम करने के लिए कुछ ट्रिगर की आवश्यकता होगी ।
अराजकतावादी

0

आप निम्नलिखित की तरह कुछ कोशिश कर सकते हैं और इसे लागू कर सकते हैं। मुझे लगता है कि एक मोबाइल डिवाइस को केवल एक प्रस्ताव वापस करना चाहिए।

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

एकता में स्क्रीन के बारे में अधिक जानकारी के लिए यहां एक नज़र डालें http://unity3d.com/support/documentation/ScriptReference.Sn.html


इससे मुझे मदद नहीं मिली, संकल्प अभी भी बंद है।
टिमोथी विलियम्स

यह किसी कारण से मेरे एंड्रॉइड पर "0x0" देता है ...
टिमोथी विलियम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.