मेरी विधि ज्यादातर दूसरों द्वारा दिए गए समाधानों के समान है :) मैं खेल को स्क्रीन आकार से स्वतंत्र बनाने के लिए जो दृष्टिकोण लेता हूं, उसके बारे में विस्तार से बताने की कोशिश करूंगा।
स्क्रीन दिशानिर्देश
स्क्रीन ओरिएंटेशन (लैंडस्केप या पोर्ट्रेट) के आधार पर, आपको यह विचार करने की आवश्यकता है कि क्या कैमरा एक निश्चित ऊंचाई या निश्चित चौड़ाई के साथ स्केल करेगा। ज्यादातर मैं लैंडस्केप ओरिएंटेड गेम्स के लिए निश्चित चौड़ाई और पोर्ट्रेट ओरिएंटेड गेम्स के लिए निश्चित ऊंचाई चुनता हूं।
कैमरा स्केलिंग
जैसा कि चर्चा है कि यह निश्चित ऊंचाई या निश्चित चौड़ाई हो सकती है।
फिक्स्ड हाइट : गेम का वर्टिकल एरिया हमेशा स्क्रीन की ऊंचाई पर फिट होगा। और जैसा कि स्क्रीन आस्पेक्ट रेश्यो में बदलाव होता है, स्क्रीन के बाईं और दाईं ओर अतिरिक्त स्थान जुड़ जाएगा। इसे लागू करने के लिए आपको कुछ भी कोड करने की आवश्यकता नहीं है, यह एकता कैमरे का डिफ़ॉल्ट व्यवहार है।
निश्चित चौड़ाई : खेल का क्षैतिज क्षेत्र हमेशा स्क्रीन की चौड़ाई के अनुरूप होगा। और अतिरिक्त परिवर्तन स्क्रीन के पहलू अनुपात के रूप में ऊपर और नीचे से जोड़ा जाएगा। इसे लागू करने के लिए आपको एक छोटा सा कोड लिखना होगा। बाद में सुनिश्चित करें कि आप कोड फॉर्म अपडेट फ़ंक्शन को हटा दें, और इसे जाग में रखें।
using UnityEngine;
[ExecuteInEditMode]
public class ScaleWidthCamera : MonoBehaviour {
public int targetWidth = 640;
public float pixelsToUnits = 100;
void Update() {
int height = Mathf.RoundToInt(targetWidth / (float)Screen.width * Screen.height);
camera.orthographicSize = height / pixelsToUnits / 2;
}
}
संपादक में आप जिस विश्व अंतरिक्ष क्षेत्र को प्रदर्शित करना चाहते हैं उसे परिभाषित करने के लिए लक्ष्य-निर्धारण को बदल सकते हैं। इस कोड को 2 डी गेम के लिए कई अन्य प्रथाओं के साथ निम्नलिखित वीडियो में समझाया गया है :)
यूनाइट 2014 - 2 डी सर्वश्रेष्ठ अभ्यास एकता में
आस्पेक्ट अनुपात
व्यापक से संकीर्णतम में सूचीबद्ध पहलू अनुपात के बाद, Android और iOS दोनों के लिए लगभग सभी स्क्रीन आकार शामिल हैं
- 5: 4
- 4: 3
- 3: 2
- 16:10
- 16: 9
मैं आमतौर पर गेम विंडो के तहत दिए गए क्रम में इन सभी पहलुओं को निर्धारित करता हूं, क्योंकि यह विभिन्न स्क्रीन आकारों के लिए परीक्षण करते समय आसान है :)
व्यय क्षेत्र
यह वह क्षेत्र है जो आपके द्वारा चुने गए कैमरा स्केलिंग के आधार पर स्क्रीन पर साइड या टॉप / बॉटम में जुड़ जाता है।
निश्चित ऊंचाई के लिए सभी खेल तत्वों को अधिमानतः 16: 9 के अनुपात में फिट होना चाहिए जो सबसे संकीर्ण है। और पृष्ठभूमि का विस्तार तब तक होना चाहिए जब तक कि यह 5: 4 अनुपात को कवर न कर दे। जो यह सुनिश्चित करता है कि आपके खेल में पक्षों पर कभी भी काली पट्टी न हो।
निश्चित चौड़ाई के लिए यह लगभग समान है लेकिन यहां तत्वों को 5: 4 अनुपात में फिट होना चाहिए और बीजी को 16: 9 तक बढ़ाना चाहिए।
सीमा
कभी-कभी हम खर्च करने योग्य क्षेत्र के दृष्टिकोण का उपयोग नहीं कर सकते हैं क्योंकि हमें खेल खेलने के लिए पूरी उपलब्ध स्क्रीन का उपयोग करने की आवश्यकता है।
उदाहरण के लिए, आसमान से गिरने वाले सिक्कों को पकड़ते हुए, निश्चित ऊंचाई के साथ एक पोर्ट्रेट गेम पर विचार करें। इसमें हमें खिलाड़ी को उपलब्ध स्क्रीन की चौड़ाई पर क्षैतिज रूप से चलने की क्षमता देने की आवश्यकता है।
इसलिए हमें यह जानने के लिए दुनिया के समन्वय के संदर्भ में कैमरे की सीमा की आवश्यकता है कि दुनिया की स्थिति में कैमरे के क्लिप के बाएं, दाएं, ऊपर या नीचे कहां हैं।
हम इन सीमा का उपयोग गेम तत्वों या UI को कैमरे के वांछित पक्ष में करने के लिए भी कर सकते हैं।
Camera.ViewportToWorldPoint का उपयोग करके हम सीमा प्राप्त कर सकते हैं। दृश्य स्थान सामान्य और कैमरे के सापेक्ष है। कैमरे के नीचे-बाएँ (0,0) है; शीर्ष-दाईं ओर (1,1) है। Z स्थिति कैमरे से विश्व इकाइयों में है। 2D / orthographic के लिए z कोई मायने नहीं रखता।
Vector3 leftBottom = camera.ViewportToWorldPoint(new Vector3(0, 0, camera.nearClipPlane));
Vector3 rightTop = camera.ViewportToWorldPoint(new Vector3(1, 1, camera.nearClipPlane));
float left = leftBottom.x;
float bottom = leftBottom.y;
float right = rightTop.x;
float top = rightTop.y;
यूआई
यूआई के लिए हम वही अवधारणाएं लागू कर सकते हैं जो हमने खेल तत्वों के लिए उपयोग की थीं। यूनिटी 5 यूआई की शुरुआत और एनजीयूआई जैसे प्लगइन्स की उपलब्धता के बाद यह बहुत समस्या नहीं होगी :)